是否有任何将元组视为单子的scala库

Is there any scala library that treat tuples as monads

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

我要找的东西:

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

应等于 (3, "as")。以及

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

是的,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 更容易一些。)