5

有固定的名称maybe mzero return吗?

它具有以下类型:

MonadPlus m => Maybe a -> m a

并转换为Nothing失败和.Just areturn a

4

1 回答 1

8

以上都是一样的。

一个明显的变体是

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

但写出来可能更清楚。

于 2016-05-17T02:16:25.637 回答