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

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

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

非常简单:

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

三元组和更大的元组可能应该有 FoldableTraversable 实例,因此您不需要手写,但目前没有,所以...