Haskell标准函数(或简单组合)用于" mjoin"?

时间:2014-12-06 05:17:02

标签: haskell

这似乎是一个很长的镜头,但最近我需要以下内容:

mjoin :: (Monoid b, Monad m) => m b -> m b -> m b
mjoin a b = do
  a' <- a
  b' <- b
  return $ mappend a' b'

示例用法是:

> mjoin (Just [1,2,3]) (Just [4, 5, 6])
Just [1,2,3,4,5,6]
> mjoin (Just [1,2,3]) Nothing
Nothing
> mjoin Nothing (Just [4, 5, 6])
Nothing

换句话说,如果任一参数为Nothing,则返回Nothing。否则,返回Just和附加值。

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

1 个答案:

答案 0 :(得分:9)

也许是这样的:

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