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
三元组和更大的元组可能应该有 Foldable
和 Traversable
实例,因此您不需要手写,但目前没有,所以...
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
三元组和更大的元组可能应该有 Foldable
和 Traversable
实例,因此您不需要手写,但目前没有,所以...