haskell - para - inyeccion intramuscular muslo
Cómo inyectar un valor de Maybe en MaybeT (1)
MaybeT . return :: (Monad m) => Maybe a -> MaybeT m a
Creo que es una pena que no tenga un nombre estándar. Una forma más general es
liftMaybe :: (MonadPlus m) => Maybe a -> m a
liftMaybe = maybe mzero return
Lo cual es preferible al uso de fail
. Acabo de ponerlo en un módulo conveniente en alguna parte.
Hayoo muestra una amplia variedad de nombres para esta función; De esos, maybeZero
es mi favorito. liftMaybe
, tan obvio como es, no aparece.
Digamos que tengo algunos foo :: Maybe Int
y quiero enlazarlos, por ejemplo, con bar :: Int -> MaybeT (Writer String) Int
, ¿cuál sería la forma idiomática de hacerlo?
Podría definir mi propia función liftMaybe
y luego usarla, como:
let liftMaybe = maybe (fail "Nothing") return in liftMaybe foo >>= bar
¿Pero hay una manera más idiomática (o al menos concisa) de hacerlo?