Rei*_*ica 1 error-handling haskell either maybe
是否有一个Haskell模式可以避免编写这个自定义函数?想法是将Maybe中的Nothing作为错误处理(作为包装的一部分):
eitherMaybeHandle :: String -> Either String (Maybe a) -> Either String a
eitherMaybeHandle err = \case
Left e ->
Left e
Right Nothing ->
Left err
Right (Just a) ->
Right a
Run Code Online (Sandbox Code Playgroud)
首先,你可以使用sequence转一Either a (Maybe b)成Maybe (Either a b).然后您可以将fromMaybe结果与您的类型值一起应用a以获得Either a b.
import Data.Maybe (fromMaybe)
eitherMaybeHandle :: a -> Either a (Maybe b) -> Either a b
eitherMaybeHandle err = fromMaybe (Left err) . sequence
Run Code Online (Sandbox Code Playgroud)