是否有任何scala库可以使用monad语法丰富基本scala元组。类似于Writer monad的东西,但根据元组的使用进行了调整。
我在寻找:
val pair = (2, "as")
pair >>= (a => point(a+1))
应该等于(3, "as")
。和
for (p <- pair) yield (p+1)
答案 0 :(得分: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)
(请注意,类型别名不是必需的 - 它只会使point
更容易使用。)