scalaz では、a -> m b
and b -> m c
intoのような関数を構成する方法がありa -> m c
ます (ここでの関数 from String
toのようにSet[String]
)。ちなみに、それらはクライスリ関数と呼ばれます。haskell では、これは>=>
これらの関数で簡単に実行できます。scala では、もう少し冗長にする必要があります (ちなみに、例を少し変更しましSet
たList
。
scala> import scalaz._, std.list._
import scalaz._
import std.list._
scala> def f(x: String) = List(x, x.reverse)
f: (x: String)List[String]
scala> def g(x: String) = List(x, x.toUpperCase)
g: (x: String)List[java.lang.String]
scala> val composition = Kleisli(f) >=> Kleisli(g)
composition: scalaz.Kleisli[List,String,java.lang.String] = scalaz.KleisliFunctions$$anon$18@37911406
scala> List("hi", "bye") flatMap composition
res17: List[java.lang.String] = List(hi, HI, ih, IH, bye, BYE, eyb, EYB)