Cómo inyectar un valor Maybe en MaybeT
Digamos que tengo algo foo :: Maybe Int
y quiero enlazarlo, 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 forma más idiomática (o al menos concisa) de hacer eso?
23
Author: user1078763, 2011-12-31
1 answers
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
Que es preferible al uso de fail
. Lo pondría en un módulo conveniente en algún lugar.
Hayoo muestra una amplia variedad de nombres para esta función; de ellos, maybeZero
es mi favorito. liftMaybe
, tan obvio como es, no aparece.
20
Author: ehird,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-26 18:00:16
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-26 18:00:16