我需要一个Monad m => m [a] -> [m a]
类型的函数,它与sequence
的函数一样,但反过来。
我已尝试在Hoogle上搜索具有此类型签名的任何功能,但似乎并不存在任何功能。一般来说不可能吗?我应该开始避免这种类型的建筑吗?
答案 0 :(得分:7)
可能没有这样的功能,因为不是每个monad都承认一种"退出功能" m a -> a
。 IO
例证了这一点:如果您有IO a
,则无法移除IO
构造函数(除了您可能不想使用的unsafePerformIO
)。< / p>
monad类型类函数
return :: a -> m a
(>>=) :: m a -> (a -> m b) -> m b
在最右边的箭头后面都有m a
,因此如果不对您的函数施加更多约束,则无法从列表m
周围删除[a]
构造函数。