是否有任何scala库将元组视为monad

ayv*_*ngo 5 monads scala tuples

是否有任何scala库使用monad语法丰富基本scala元组.类似于Writer monad的东西,但调整了与元组的使用.

我在找什么:

val pair = (2, "as")
pair >>= (a => point(a+1))
Run Code Online (Sandbox Code Playgroud)

应该等于(3, "as").以及

for (p <- pair) yield (p+1)
Run Code Online (Sandbox Code Playgroud)

Tra*_*own 8

是的,Scalaz为元组提供了monad实例(最多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)
Run Code Online (Sandbox Code Playgroud)

(请注意,类型别名不是必需的 - 它只是使用起来point更容易.)