我正在使用API的servant库。它运行在:EitherT (Int, String) IO a
monad中。我有一个类型IO Maybe a
的功能,并且想要使用它。从IO Maybe a转换为EitherT IO a
这里有一个工作的例子:
sourcesGetAll :: EitherT (Int, String) IO [Source]
sourcesGetAll = liftIO $ sourcesList h
sourcesList :: IO [Source]
但现在我要使用这两个功能结合在一起
sourcesFind :: IO (Maybe Source)
sourcesGetOne :: EitherT (Int, String) IO Source
sourcesGetOne = ???
我想做到这一点:
maybeNotFound :: Maybe a -> Either (Int, String) a
maybeNotFound Nothing = Left (404, "Not Found")
maybeNotFound Just a = Right a
怎么办我是用所有花哨的单子做的?
我想既然是切换到ExceptT而不是EitherT这不会以'错误2.0'工作? – bennofs
正确。 'errors-2.0'将使用'ExceptT'而不是'EitherT' –