要么内在也许错误处理

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)

4ca*_*tle 5

首先,你可以使用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)