Ich möchte meine eigenen zum Verständnis kompatiblen Monaden und Funktoren in Scala implementieren.Wie kann man seine eigene scala monad verstehen?
Nehmen wir zwei dumme Monaden als Beispiel. Eine Monade ist eine Zustands-Monade, die ein "Int" enthält, das Sie abbilden oder abbilden können.
val maybe = IntMonad(5)
maybe flatMap(a => 3 * (a map (() => 2 * a)))
// returns IntMonad(30)
Eine andere Monade nimmt funktioniert Zusammensetzung wie so ...
val func = FunctionMonad(() => println("foo"))
val fooBar = func map (() => println("bar"))
fooBar()
// foo
// bar
// returns Unit
Das Beispiel einige Fehler haben, aber Sie bekommen die Idee.
Ich möchte in der Lage sein, diese zwei verschiedenen Arten von erfundenen Monaden innerhalb eines Verständnisses in Scala zu verwenden. Wie folgt aus:
val myMonad = IntMonad(5)
for {
a <- myMonad
b <- a*2
c <- IntMonad(b*2)
} yield c
// returns IntMonad(20)
Ich bin kein Scala Meister, aber Sie bekommen die Idee
Wäre es besser, die Scallaz Monad Art zu verwenden, anstatt Ihre eigenen definieren? –
'filter' api ist auch erforderlich, um die Monad-Elemente zu" entpacken ". Wenn Sie zum Beispiel ein MaybeAB verwenden, das dem MaybeInt ähnlich ist, aber für eine 'Case-Klasse AB (a: Int, b: Int)', muss der Filter 'for (AB (a, b) <- maybAB) tun ... ' –