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

时间:2015-06-15 18:21:06

标签: scala tuples monads

是否有任何scala库可以使用monad语法丰富基本scala元组。类似于Writer monad的东西,但根据元组的使用进行了调整。

我在寻找:

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

应该等于(3, "as")。和

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

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更容易使用。)