Устанавливается ли имя для maybe mzero return
?Есть ли название для «возможно mzero return»?
Он имеет тип:
MonadPlus m => Maybe a -> m a
и преобразует Nothing
до отказа и Just a
к return a
.
Устанавливается ли имя для maybe mzero return
?Есть ли название для «возможно 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
, но это, наверное, понятнее просто написать его.
Мне было интересно, если сообщество пришло к консенсусу относительно того, как его следует называть. Кажется, как кандидат на включение в «базу» где-то. – ErikR
@ErikR, я не знаю об этом. Сожалею. – dfeuer
@dfeuer Возможно, 'foldAlt = asum. fmap pure' делает более понятным, как он похож на 'asum'. –