2015-06-15 10 views
5

Esiste una libreria di scala che arricchisce le tuple di scala di base con la sintassi di monade. Qualcosa di simile alla monade di Writer, ma adattato per l'uso con le tuple.Esiste una libreria di scala che tratta le tuple come monadi

Quello che cerco:

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

deve essere uguale a (3, "as"). Così come

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

Puoi pubblicare qualche codice di esempio che ti aspetti di lavorare? Non so esattamente cosa stai chiedendo. – ziggystar

+0

Aggiunto breve esempio – ayvango

risposta

8

Yep, Scalaz fornisce istanze monade di tuple (fino a 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) 

(Si noti che il tipo di alias non è necessario, rende solo usando point un po 'più facile .)

+0

Ho dimenticato completamente questo! – wheaties