Esiste un nome valido per maybe mzero return
?Esiste un nome per "forse mzero return"?
Essa ha il tipo:
MonadPlus m => Maybe a -> m a
e converte Nothing
al fallimento e Just a
a return a
.
Esiste un nome valido per maybe mzero return
?Esiste un nome per "forse mzero return"?
Essa ha il tipo:
MonadPlus m => Maybe a -> m a
e converte Nothing
al fallimento e Just a
a return a
.
optparse-applicative
ha hoistMaybe
.
monad-extras
ha liftMaybe
.
errors
dispone di justZ
.
IfElse
ha maybeMP
Tutto quanto sopra sono le stesse.
Una variante ovvia sarebbe
maybeAlt :: Alternative f => Maybe a -> f a
maybeAlt = maybe empty pure
E questo è un caso particolare dei seguenti, simile a asum
.
import Data.Monoid
import Control.Applicative
foldAlt :: (Foldable f, Alternative m) => f a -> m a
foldAlt = getAlt . foldMap (Alt . pure)
Il motivo che non troverete da nessuna parte questo è che pure a <|> x === pure a
. Quindi è buono per questo e non molto altro. Potrebbe essere migliorata per
foldAltMap f = getAlt . foldMap (Alt . f)
o
foldrAltMap f = foldr (\x r -> f x <|> r) empty
ma probabilmente è più chiaro solo scrivere fuori.
Mi chiedevo se la comunità ha raggiunto un consenso su ciò che dovrebbe essere chiamato. Sembra un candidato per l'inclusione in 'base' da qualche parte. – ErikR
@ErikR, non lo so. Scusate. – dfeuer
@dfeuer Forse 'foldAlt = asum. fmap pure' rende più chiaro esattamente come è simile a 'asum'. –