2015-06-15 4 views
5

Gibt es eine Scala-Bibliothek, die grundlegende Scala-Tupel mit Monad-Syntax anreichert? Etwas ähnliches wie die Writer-Monade, aber für die Verwendung mit Tupeln angepasst.Gibt es eine Scala-Bibliothek, die Tupel als Monade behandelt?

Was ich suche:

val pair = (2, "as") 
pair >>= (a => point(a+1)) 

zu (3, "as") sollte gleich. Neben

for (p <- pair) yield (p+1) 
+1

Können Sie Beispielcode posten, von dem Sie erwarten, dass er funktioniert? Ich weiß nicht, wonach genau du fragst. – ziggystar

+0

Kurzes Beispiel hinzugefügt – ayvango

Antwort

8

Yep, bietet Scalaz Monade Instanzen für Tupel (bis zu Tuple8):

import scalaz.std.anyVal._, scalaz.std.tuple._, scalaz.syntax.monad._ 

scala> type IntTuple[A] = (Int, A) 
defined type alias IntTuple 

scala> pair >>= (a => (a+1).point[IntTuple]) 
res0: (Int, String) = (2,as1) 

scala> for (p <- pair) yield (p + 1) 
res1: (Int, String) = (2,as1) 

(Beachten Sie, dass der Typ alias nicht notwendig ist-es macht point mit ein wenig leichter .)

+0

Ich habe das komplett vergessen! – wheaties