假设我有一个Monad m => (m a, m a)类型的值,并且我想对这对货币对进行“排序”,以创建一个Monad m => m (a, a)类型的值,该值以与“序列”函数相同的方式组合两个值的单子(monad)上下文。有某种标准功能或标准方式可以做到这一点吗?这项操作甚至有意义吗?

最佳答案

对于所有不同的元组类型,都不会有单个函数,因为它不会具有单个类型。

您可以定义一系列功能,例如:

ts0 = return
ts2 = uncurry $ liftM2 (,)
ts3 = uncurr3 $ liftM3 (,,)
{- ... -}
uncurr3 f (x, y, z) = f x y z

当然,一般而言,顺序更好地应用到了应用程序而不是单子(monad)上,这就是为什么它是Traversable类型类的一部分的原因。我相信,可以使同质元组[(a,a,a)但不能(a,b,a)]成为MonoTraversable的实例。

您还应该看到another answer,它指示已经存在一个包含此功能家族的库。

09-25 18:37
查看更多