module Argo.QuasiQuoter where import qualified Argo.Decode as Decode import qualified Argo.Json.Value as Value import qualified Argo.Result as Result import qualified Argo.Vendor.TemplateHaskell as TH import qualified Argo.Vendor.Text as Text pointer :: TH.QuasiQuoter pointer :: QuasiQuoter pointer = QuasiQuoter :: (String -> Q Exp) -> (String -> Q Pat) -> (String -> Q Type) -> (String -> Q [Dec]) -> QuasiQuoter TH.QuasiQuoter { quoteDec :: String -> Q [Dec] TH.quoteDec = Q [Dec] -> String -> Q [Dec] forall a b. a -> b -> a const (Q [Dec] -> String -> Q [Dec]) -> Q [Dec] -> String -> Q [Dec] forall a b. (a -> b) -> a -> b $ String -> Q [Dec] forall (m :: * -> *) a. MonadFail m => String -> m a fail String "cannot be used as a declaration" , quoteExp :: String -> Q Exp TH.quoteExp = (String -> Q Exp) -> (Pointer -> Q Exp) -> Result Pointer -> Q Exp forall b a. (String -> b) -> (a -> b) -> Result a -> b Result.result String -> Q Exp forall (m :: * -> *) a. MonadFail m => String -> m a fail Pointer -> Q Exp forall t. Lift t => t -> Q Exp TH.lift (Result Pointer -> Q Exp) -> (String -> Result Pointer) -> String -> Q Exp forall b c a. (b -> c) -> (a -> b) -> a -> c . ByteString -> Result Pointer Decode.decodePointer (ByteString -> Result Pointer) -> (String -> ByteString) -> String -> Result Pointer forall b c a. (b -> c) -> (a -> b) -> a -> c . Text -> ByteString Text.encodeUtf8 (Text -> ByteString) -> (String -> Text) -> String -> ByteString forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> Text Text.pack , quotePat :: String -> Q Pat TH.quotePat = Q Pat -> String -> Q Pat forall a b. a -> b -> a const (Q Pat -> String -> Q Pat) -> Q Pat -> String -> Q Pat forall a b. (a -> b) -> a -> b $ String -> Q Pat forall (m :: * -> *) a. MonadFail m => String -> m a fail String "cannot be used as a pattern" , quoteType :: String -> Q Type TH.quoteType = Q Type -> String -> Q Type forall a b. a -> b -> a const (Q Type -> String -> Q Type) -> Q Type -> String -> Q Type forall a b. (a -> b) -> a -> b $ String -> Q Type forall (m :: * -> *) a. MonadFail m => String -> m a fail String "cannot be used as a type" } value :: TH.QuasiQuoter value :: QuasiQuoter value = QuasiQuoter :: (String -> Q Exp) -> (String -> Q Pat) -> (String -> Q Type) -> (String -> Q [Dec]) -> QuasiQuoter TH.QuasiQuoter { quoteDec :: String -> Q [Dec] TH.quoteDec = Q [Dec] -> String -> Q [Dec] forall a b. a -> b -> a const (Q [Dec] -> String -> Q [Dec]) -> Q [Dec] -> String -> Q [Dec] forall a b. (a -> b) -> a -> b $ String -> Q [Dec] forall (m :: * -> *) a. MonadFail m => String -> m a fail String "cannot be used as a declaration" , quoteExp :: String -> Q Exp TH.quoteExp = (String -> Q Exp) -> (Value -> Q Exp) -> Result Value -> Q Exp forall b a. (String -> b) -> (a -> b) -> Result a -> b Result.result String -> Q Exp forall (m :: * -> *) a. MonadFail m => String -> m a fail Value -> Q Exp forall t. Lift t => t -> Q Exp TH.lift (Result Value -> Q Exp) -> (String -> Result Value) -> String -> Q Exp forall b c a. (b -> c) -> (a -> b) -> a -> c . (Value -> Value) -> Result Value -> Result Value forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap Value -> Value asValue (Result Value -> Result Value) -> (String -> Result Value) -> String -> Result Value forall b c a. (b -> c) -> (a -> b) -> a -> c . ByteString -> Result Value forall a. FromValue a => ByteString -> Result a Decode.decode (ByteString -> Result Value) -> (String -> ByteString) -> String -> Result Value forall b c a. (b -> c) -> (a -> b) -> a -> c . Text -> ByteString Text.encodeUtf8 (Text -> ByteString) -> (String -> Text) -> String -> ByteString forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> Text Text.pack , quotePat :: String -> Q Pat TH.quotePat = Q Pat -> String -> Q Pat forall a b. a -> b -> a const (Q Pat -> String -> Q Pat) -> Q Pat -> String -> Q Pat forall a b. (a -> b) -> a -> b $ String -> Q Pat forall (m :: * -> *) a. MonadFail m => String -> m a fail String "cannot be used as a pattern" , quoteType :: String -> Q Type TH.quoteType = Q Type -> String -> Q Type forall a b. a -> b -> a const (Q Type -> String -> Q Type) -> Q Type -> String -> Q Type forall a b. (a -> b) -> a -> b $ String -> Q Type forall (m :: * -> *) a. MonadFail m => String -> m a fail String "cannot be used as a type" } asValue :: Value.Value -> Value.Value asValue :: Value -> Value asValue = Value -> Value forall a. a -> a id