module Aeson.Match.QQ ( Value(..) , Array , Object , Box(..) , TypeSig(..) , Type(..) , Nullable(..) , Path , PathElem(..) , parse , qq , match , mismatch , missingPathElem , extraArrayValues , extraObjectValues ) where import Data.String (IsString(..)) import qualified Data.Text.Encoding as Text import Language.Haskell.TH.Quote (QuasiQuoter(..)) import Language.Haskell.TH.Syntax (Lift(..)) import Aeson.Match.QQ.Internal.Match (Path, PathElem(..), match, mismatch, missingPathElem, extraArrayValues, extraObjectValues) import Aeson.Match.QQ.Internal.Parse (parse) import Aeson.Match.QQ.Internal.Value (Value(..), Box(..), Array, Object, TypeSig(..), Type(..), Nullable(..)) qq :: QuasiQuoter qq :: QuasiQuoter qq = QuasiQuoter :: (String -> Q Exp) -> (String -> Q Pat) -> (String -> Q Type) -> (String -> Q [Dec]) -> QuasiQuoter QuasiQuoter { quoteExp :: String -> Q Exp quoteExp = \String str -> case ByteString -> Either String (Value Exp) parse (Text -> ByteString Text.encodeUtf8 (String -> Text forall a. IsString a => String -> a fromString String str)) of Left String err -> String -> Q Exp forall a. HasCallStack => String -> a error (String "Aeson.Match.QQ.qq: " String -> String -> String forall a. [a] -> [a] -> [a] ++ String err) Right Value Exp val -> Value Exp -> Q Exp forall t. Lift t => t -> Q Exp lift Value Exp val , quotePat :: String -> Q Pat quotePat = \String _ -> String -> Q Pat forall a. HasCallStack => String -> a error String "Aeson.Match.QQ.qq: no quotePat" , quoteType :: String -> Q Type quoteType = \String _ -> String -> Q Type forall a. HasCallStack => String -> a error String "Aeson.Match.QQ.qq: no quoteType" , quoteDec :: String -> Q [Dec] quoteDec = \String _ -> String -> Q [Dec] forall a. HasCallStack => String -> a error String "Aeson.Match.QQ.qq: no quoteDec" }