有固定的名称maybe mzero return
吗?
它具有以下类型:
MonadPlus m => Maybe a -> m a
并转换为Nothing
失败和.Just a
return a
有固定的名称maybe mzero return
吗?
它具有以下类型:
MonadPlus m => Maybe a -> m a
并转换为Nothing
失败和.Just a
return a
optparse-applicative
有hoistMaybe
。
monad-extras
有liftMaybe
。
errors
有justZ
。
IfElse
有maybeMP
以上都是一样的。
一个明显的变体是
maybeAlt :: Alternative f => Maybe a -> f a
maybeAlt = maybe empty pure
这是以下情况的特例,类似于asum
.
import Data.Monoid
import Control.Applicative
foldAlt :: (Foldable f, Alternative m) => f a -> m a
foldAlt = getAlt . foldMap (Alt . pure)
你在任何地方都找不到这个的原因是pure a <|> x === pure a
. 所以这对这个有好处,其他没什么。它可以改进为
foldAltMap f = getAlt . foldMap (Alt . f)
或者
foldrAltMap f = foldr (\x r -> f x <|> r) empty
但写出来可能更清楚。