Fight the Future

Java言語とJVM、そしてJavaエコシステム全般にまつわること

continuation monadのコードが読めない(Scala)

モナドってだけで若干引き気味だけど。
モナドにもいろんな種類があって、その1つがcontinuation monadらしい。


で、サンプルを動かそうとしたけど、ソースの意味が理解できない。
いかん。実力がないのがバレバレだ。。。

  type Answer = Value;

  /** 
   * A continuation monad. 
   */
  case class M[A](in: (A => Answer) => Answer) {
    def bind[B](k: A => M[B])          = M[B](c => in (a => k(a) in c))
    def map[B](f: A => B): M[B]        = bind(x => unitM(f(x)))
    def flatMap[B](f: A => M[B]): M[B] = bind(f)
  }

  def unitM[A](a: A) = M[A](c => c(a))

unitMで「c」ってあるけど、このcって何?
どこにも「c」なんて出てこないのに。
教えてエラい人。。。


元ソースはここです。
callccInterpreter.scala | The Scala Programming Language