module Aeson.Match.QQ ( Value(..) , Array , Object , Box(..) , TypeSig(..) , Type(..) , Nullable(..) , Path , PathElem(..) , parse , qq , match , mismatch , mistype , 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 , mistype , 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" }