Haskell标准函数(或简单组合);mjoin“是吗?”;?

Haskell标准函数(或简单组合);mjoin“是吗?”;?,haskell,Haskell,这似乎不太可能,但最近我需要以下几点: mjoin :: (Monoid b, Monad m) => m b -> m b -> m b mjoin a b = do a' <- a b' <- b return $ mappend a' b' 换句话说,如果任一参数为Nothing,则返回Nothing。否则,只返回和附加值 是否有标准函数或更简单的公式,可能是>=?可能是这样的: mjoin :: (Monoid b, Monad m) =>

这似乎不太可能,但最近我需要以下几点:

mjoin :: (Monoid b, Monad m) => m b -> m b -> m b
mjoin a b = do
  a' <- a
  b' <- b
  return $ mappend a' b'
换句话说,如果任一参数为
Nothing
,则返回
Nothing
。否则,只返回
和附加值


是否有标准函数或更简单的公式,可能是
>=

可能是这样的:

mjoin :: (Monoid b, Monad m) => m b -> m b -> m b
mjoin = liftM2 mappend

稍微简化一下就是
liftM2-mappend
@sabauma:为什么不写下来作为答案呢?谢谢。我知道它在某个地方被覆盖了。@Ana这也意味着你不需要将
mjoin
定义为一个函数,你只需要执行
liftA2 mappend(仅[1,2,3])(仅[4,5,6])
。(我建议
liftA2
因为你不是真正在做monad的东西,你只是在做应用程序的东西。)(只要使用的类型是这两种类型的实例,现在几乎总是这样)
mjoin :: (Monoid b, Monad m) => m b -> m b -> m b
mjoin = liftM2 mappend