{- | Module : Composite.Aeson.Throw License : MIT Stability : experimental MonadThrow behaviour for composite-aeson. -} module Composite.Aeson.Throw ( CompositeAesonParseException , parseValue' ) where import Composite.Aeson import Control.Monad.Catch import Data.Aeson import Data.Aeson.BetterErrors import Data.Typeable -- | Simple exception type for composite-aeson. newtype CompositeAesonParseException a = CompositeAesonParseException a deriving (Eq, Show, Ord) instance (Typeable a, Show a) => Exception (CompositeAesonParseException a) -- | Parse a value according to the provided `JsonFormat` and throw to `MonadThrow` on exception. parseValue' :: (Typeable e, Show e, MonadThrow m) => JsonFormat e x -> Value -> m x parseValue' f v = do let a = parseValue (fromJsonWithFormat f) v either (throwM . CompositeAesonParseException) return a