2014-01-06 7 views
14

Es scheint wie die Optional in Java 8 is a monad.Sind die Streams in Java 8 Monaden?

Sind die Streams auch Monaden?

Kann jemand das endofunctor und die zwei natürlichen Transformationen im optionalen monad identifizieren?

+0

Nicht wissen Streams sehr gut, ich denke es ist. Doch wie kommt es darauf an? Sie können nicht über Typkonstruktoren in Java abstrahieren, Sie können auch den Rückgabetyp nicht überladen, daher können Sie wahrscheinlich keinen Java-Code schreiben, der im Monad-Konstruktor polymorph ist. – Ingo

Antwort

11

EDIT Die Antwort ist unten falsche (hier für die Geschichte erhalten).

Ja, in jedem Fall besteht die Funktors der Klasse und ihre map Methode, und die beiden natürlichen Transformationen sind of und flatMap(identity).

Die richtige Antwort scheint here zu sein.

+0

müssten wir definieren: \ displaystyle \ begin {array} {lcl} \ mathit {return} & :: & a \ rightarrow \ mathit {Stream} \, a \\ mathit {join} & :: & \ mathit {Stream} \, (\ mathit {Stream} \, a) \ rechter Pfeil \ Math {Stream} \, a \ end {Array} –

1

Wenn Sie Haskell kennen: Javas Stream ist nichts anderes als Haskells Liste monad [] und Java's Optional ist nichts anderes als die Haskell's Maybe Monade.