Скажем, у меня есть foo :: Maybe Int
, и я хочу привязать его, например, с помощью bar :: Int -> MaybeT (Writer String) Int
, каков был бы идиоматический способ сделать это?
Я мог бы определить свою собственную функцию liftMaybe
, а затем использовать ее, например:
let liftMaybe = maybe (fail "Nothing") return in liftMaybe foo >>= bar
Но есть ли более идиоматический (или, по крайней мере, краткий) способ сделать это?