module Data.Aeson.BetterErrors.Utils where
import Control.Monad.Error.Class (MonadError(..))
import qualified Data.Aeson as A
import Data.Scientific (Scientific)
import Data.Text (Text, pack)
tshow :: Show a => a -> Text
tshow :: a -> Text
tshow = String -> Text
pack (String -> Text) -> (a -> String) -> a -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> String
forall a. Show a => a -> String
show
catchJust :: MonadError e m
=> (e -> Maybe b)
-> m a
-> (b -> m a)
-> m a
catchJust :: (e -> Maybe b) -> m a -> (b -> m a) -> m a
catchJust p :: e -> Maybe b
p act :: m a
act handler :: b -> m a
handler = m a -> (e -> m a) -> m a
forall e (m :: * -> *) a.
MonadError e m =>
m a -> (e -> m a) -> m a
catchError m a
act e -> m a
handle
where
handle :: e -> m a
handle e :: e
e =
case e -> Maybe b
p e
e of
Nothing -> e -> m a
forall e (m :: * -> *) a. MonadError e m => e -> m a
throwError e
e
Just b :: b
b -> b -> m a
handler b
b
patNull :: A.Value -> Maybe ()
patNull :: Value -> Maybe ()
patNull A.Null = () -> Maybe ()
forall a. a -> Maybe a
Just ()
patNull _ = Maybe ()
forall a. Maybe a
Nothing
patString :: A.Value -> Maybe Text
patString :: Value -> Maybe Text
patString (A.String t :: Text
t) = Text -> Maybe Text
forall a. a -> Maybe a
Just Text
t
patString _ = Maybe Text
forall a. Maybe a
Nothing
patNumber :: A.Value -> Maybe Scientific
patNumber :: Value -> Maybe Scientific
patNumber (A.Number x :: Scientific
x) = Scientific -> Maybe Scientific
forall a. a -> Maybe a
Just Scientific
x
patNumber _ = Maybe Scientific
forall a. Maybe a
Nothing
patBool :: A.Value -> Maybe Bool
patBool :: Value -> Maybe Bool
patBool (A.Bool x :: Bool
x) = Bool -> Maybe Bool
forall a. a -> Maybe a
Just Bool
x
patBool _ = Maybe Bool
forall a. Maybe a
Nothing
patObject :: A.Value -> Maybe A.Object
patObject :: Value -> Maybe Object
patObject (A.Object obj :: Object
obj) = Object -> Maybe Object
forall a. a -> Maybe a
Just Object
obj
patObject _ = Maybe Object
forall a. Maybe a
Nothing
patArray :: A.Value -> Maybe A.Array
patArray :: Value -> Maybe Array
patArray (A.Array arr :: Array
arr) = Array -> Maybe Array
forall a. a -> Maybe a
Just Array
arr
patArray _ = Maybe Array
forall a. Maybe a
Nothing