Fight the Future

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

IT勉強会での初プレゼンなどお助けします!

勉強会でスピーカーをやりたいけど、プレゼンが初めて、苦手という方に無償でコーチできます。スライドのレビューや録画したリハへのアドバイスなどなど。Twitter@jyukutyoまでメンションでもDMでもお気軽にご連絡ください。

私はIT講師の経験があり、プレゼンはデブサミやJJUG CCCなど200人規模の経験が豊富で最大800人の前でプレゼンしました。海外ではDevoxxUSで。デブサミ2017では公募スピーカー1位、デブサミ関西2012アワードで5位となりました。

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