私はScalaで独自の理解可能な互換性のあるモナドとファンクタを実装したいと考えています。独自の理解力のあるスカラーモナドを作る方法は?
例として2つの愚かなモナドを取ってみましょう。 1つのモナドは、マップまたはフラット・マップできる "Int"を含む状態モナドです。
val maybe = IntMonad(5)
maybe flatMap(a => 3 * (a map (() => 2 * a)))
// returns IntMonad(30)
別のモナドがかかるので、のような関数合成は...
val func = FunctionMonad(() => println("foo"))
val fooBar = func map (() => println("bar"))
fooBar()
// foo
// bar
// returns Unit
の例では、いくつかのミスがあるかもしれませんが、あなたのアイデアを得るん。
私はこの2つの異なるタイプのMonadsをScalaでの理解のために使用したいと考えています。このように:
val myMonad = IntMonad(5)
for {
a <- myMonad
b <- a*2
c <- IntMonad(b*2)
} yield c
// returns IntMonad(20)
私はScalaのマスターではないけど、あなたは、理解の範囲内で使用するタイプのアイデア
あなた自身を定義するのではなく、Scallazモナドの型を使用する方がよいでしょうか? –
'filter' apiは、モナド項目を「解凍」する必要もあります。たとえば、MaybeIntに似ているが、 'caseクラスAB(a:Int、b:Int)'に対してMaybeABを使用する場合、フィルタは 'for(AB(a、b)< - maybAB)... ' –