モナドってだけで若干引き気味だけど。
モナドにもいろんな種類があって、その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