Lambdaカクテル

Common LISPが好きなWeb屋さんです 自宅サーバやフロントエンドもできます

scalaz

scalazのunfoldで失敗漸化式

scalazではfoldの逆操作としてunfoldが用意されている。 この関数は初期値と B => Option[(A, B)]の関数を取り、そのタプルのB成分を再び関数に適用していくことで、Aから成るStreamを構成する。 Githubのscalaz/core/src/main/scala/scalaz/StreamT.scalaに…

ScalazのKleisliの★

最近やっとの事で@yuroyoroさんや@xuwei_kさん、そして@eed3si9nさんたち先人のブログをかじってMonadicな関数を合成するやり方が分かりました。とりあえず`A => M[B]`な感じの関数を`kleisli(function)`みたいに書くと`reduce(>=>)`みたいな書き方ができる…

State monad in Scala via Scalaz

ScalazのStateモナドを使う機会があったのでメモ。 Stateモナドとは? 状態を含む計算を簡潔に記述する方法 しかもモナド たとえばこのような処理があったとする。 def foo(arg: Int): Int = { val s1 = arg + 10 val s2 = s1 * 2 val s3 = s2 - 4 s3 } 何度…

なにもしないStateモナド

こんにちは。for式でStateをチェインさせたら面倒なことになりまして。 def proc: State[A, Unit] = { for { st <- get[A] _ <- someActor ! someMessage _ <- println("ほげほげ") st3 <- get[A] } yield st3 } ここの、 _ <- someActor ! someMessage _ <-…