在Haskell中反转来自Data.Traversable的`sequence`

时间:2015-05-16 00:37:00

标签: haskell

我需要一个Monad m => m [a] -> [m a]类型的函数,它与sequence的函数一样,但反过来。

我已尝试在Hoogle上搜索具有此类型签名的任何功能,但似乎并不存在任何功能。一般来说不可能吗?我应该开始避免这种类型的建筑吗?

1 个答案:

答案 0 :(得分:7)

可能没有这样的功能,因为不是每个monad都承认一种&#34;退出功能&#34; m a -> aIO例证了这一点:如果您有IO a,则无法移除IO构造函数(除了您可能不想使用的unsafePerformIO)。< / p>

monad类型类函数

return :: a -> m a
(>>=) :: m a -> (a -> m b) -> m b

在最右边的箭头后面都有m a,因此如果不对您的函数施加更多约束,则无法从列表m周围删除[a]构造函数。