envparse-0.5.0: src/Env/Internal/Error.hs
-- | This module contains an extensible error infrastructure.
--
-- Each kind of errors gets a separate type class which encodes
-- a 'Prism' (roughly a getter and a constructor). The 'Reader's, then,
-- have the constraints for precisely the set of errors they can return.
module Env.Internal.Error
( Error(..)
, AsUnset(..)
, AsEmpty(..)
, AsUnread(..)
) where
-- | The type of errors returned by @envparse@'s 'Reader's. These fall into 3
-- categories:
--
-- * Variables that are unset in the environment.
-- * Variables whose value is empty.
-- * Variables whose value cannot be parsed.
data Error
= UnsetError
| EmptyError
| UnreadError String
deriving (Show, Eq)
-- | The class of types that contain and can be constructed from
-- the error returned from parsing unset variables.
class AsUnset e where
unset :: e
tryUnset :: e -> Maybe ()
instance AsUnset Error where
unset = UnsetError
tryUnset err =
case err of
UnsetError -> Just ()
_ -> Nothing
-- | The class of types that contain and can be constructed from
-- the error returned from parsing variables whose value is empty.
class AsEmpty e where
empty :: e
tryEmpty :: e -> Maybe ()
instance AsEmpty Error where
empty = EmptyError
tryEmpty err =
case err of
EmptyError -> Just ()
_ -> Nothing
-- | The class of types that contain and can be constructed from
-- the error returned from parsing variable whose value cannot be parsed.
class AsUnread e where
unread :: String -> e
tryUnread :: e -> Maybe String
instance AsUnread Error where
unread = UnreadError
tryUnread err =
case err of
UnreadError msg -> Just msg
_ -> Nothing