我想从Either monad转换为IO,而没有Either的任何线索。有更优雅的方法吗?
我已经编写了此函数,但是我想使用库或Prelude中的一些东西:
liftEither :: forall t (m :: * -> *) a. Monad m => (t -> m a) -> Either String t -> m a
liftEither f (Right a) = f a
liftEither _ (Left msg) = fail msg
Run Code Online (Sandbox Code Playgroud)
使用either来自Data.Either以下功能的函数:
liftEither :: Monad m => (t -> m a) -> Either String t -> m a
liftEither f xs = either fail f xs
Run Code Online (Sandbox Code Playgroud)
甚至更简单:
liftEither :: Monad m => (t -> m a) -> Either String t -> m a
liftEither = either fail
Run Code Online (Sandbox Code Playgroud)