MonadRandom m => [g(m a)] - > m [g a]

时间:2017-10-25 19:48:34

标签: haskell monads

g a是一种具体类型,我正在考虑做[g (m a)] -> [m (g a)] -> m [g a],我知道最后一步可以用sequence :: Monad m => t (m a) -> m (t a)完成。我将如何实现第一步?

1 个答案:

答案 0 :(得分:4)

非常简单:

sequenceLEdge :: Functor f => LEdge (f a) -> f (LEdge a)
sequenceLEdge (l, r, act) = fmap (\v -> (l, r, v)) act

对于三元组和更大的元组,可能会有FoldableTraversable个实例,因此您不需要手动编写,但现在还没有,所以。 ..