2013-02-26 11 views
7

Hat jemand ein voll ausgearbeitetes Beispiel einer Scala-Monade, die ein reales Problem löst und Vergleiche mit demselben in Java geschriebenen Code hat?Scala Monad - Voll funktionsfähiges Beispiel

+0

Obwohl nicht ein Beispiel für eine Skala, ist dies eine ziemlich eingehende Studie der Maybe Monade in Java (mit einigen Haskell Nr tes, um zu sehen, wie leistungsfähigere Sprachen damit umgehen können): http://logicaltypes.blogspot.com/2011/09/monads-in-java.html –

+5

Hat das jemand nicht? –

+3

Das Konzept von Monad ist nicht so seltsam, wie es scheint (oder sein Name scheint es). Diese Terminologie aus der Kategorientheorie ist im besten oder schlechtesten Sinne sehr praktisch, aber der Zeitgeist der heutigen Programmierung besteht darin, die Theorie stark zu betonen (oder sogar abzuschaffen). Das ist meiner Meinung nach eine Schande und disqualifiziert Software aus dem Bereich "Engineering" –

Antwort

11

Alle Sammlungen sind Monaden (das ist eine allgemeine Aussage, keine Scala-spezifische), oder "haben Monaden" abhängig davon, wie streng Sie darüber sein wollen. Scala hat auch Option als Monade, und die rechten und linken Projektionen von Either sowie. Du kannst ihre monadischen Aspekte bei der Arbeit sehen, wenn du ein Verständnis für sie siehst.

Ein subtileres Beispiel für Monaden in Scala sind die Parser-Kombinatoren. Es ist subtiler, weil die Operatoren die monadischen Operationen hinter Synonymen verbergen, die in einer Grammatik besser aussehen.

9
def optionAdd(x:Option[Int], y:Option[Int]):Option[Int] = 
    for(xx <- x; yy <- y) yield xx+yy 

wage ich keine Zeit mit der Java-Version zu verlieren, besonders, weil jemand sehr schlauer als ich schon http://functionaljava.org/examples/1.5/#Option.bind tat. Das Beispiel in Verbindung tut im Grunde, was optionAdd in einer unendlich weniger präzisen Weise tut.