{-# language Safe #-}
module D10.Num.Quotes where
import D10.Num.Conversions
import D10.Num.Splices
import Control.Monad ((>=>))
import Control.Monad.Fail (MonadFail (fail))
import Prelude hiding (fail)
import Language.Haskell.TH.Quote (QuasiQuoter (..))
d10 :: QuasiQuoter
d10 :: QuasiQuoter
d10 = QuasiQuoter :: (String -> Q Exp)
-> (String -> Q Pat)
-> (String -> Q Type)
-> (String -> Q [Dec])
-> QuasiQuoter
QuasiQuoter
{ quoteExp :: String -> Q Exp
quoteExp = String -> Q (D10 Integer)
forall a (m :: * -> *). (Num a, MonadFail m) => String -> m (D10 a)
strD10Fail (String -> Q (D10 Integer))
-> (D10 Integer -> Q Exp) -> String -> Q Exp
forall (m :: * -> *) a b c.
Monad m =>
(a -> m b) -> (b -> m c) -> a -> m c
>=> (Integer -> Q Exp
d10Exp (Integer -> Q Exp)
-> (D10 Integer -> Integer) -> D10 Integer -> Q Exp
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integral Integer => D10 Integer -> Integer
forall a. Integral a => D10 a -> Integer
d10Integer @Integer)
, quotePat :: String -> Q Pat
quotePat = String -> Q (D10 Integer)
forall a (m :: * -> *). (Num a, MonadFail m) => String -> m (D10 a)
strD10Fail (String -> Q (D10 Integer))
-> (D10 Integer -> Q Pat) -> String -> Q Pat
forall (m :: * -> *) a b c.
Monad m =>
(a -> m b) -> (b -> m c) -> a -> m c
>=> (Integer -> Q Pat
d10Pat (Integer -> Q Pat)
-> (D10 Integer -> Integer) -> D10 Integer -> Q Pat
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integral Integer => D10 Integer -> Integer
forall a. Integral a => D10 a -> Integer
d10Integer @Integer)
, quoteType :: String -> Q Type
quoteType = \String
_ -> String -> Q Type
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"d10 cannot be used in a type context"
, quoteDec :: String -> Q [Dec]
quoteDec = \String
_ -> String -> Q [Dec]
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"d10 cannot be used in a declaration context"
}
d10list :: QuasiQuoter
d10list :: QuasiQuoter
d10list = QuasiQuoter :: (String -> Q Exp)
-> (String -> Q Pat)
-> (String -> Q Type)
-> (String -> Q [Dec])
-> QuasiQuoter
QuasiQuoter
{ quoteExp :: String -> Q Exp
quoteExp = String -> Q Exp
d10ListExp
, quotePat :: String -> Q Pat
quotePat = String -> Q Pat
d10ListPat
, quoteType :: String -> Q Type
quoteType = \String
_ -> String -> Q Type
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"d10list cannot be used in a type context"
, quoteDec :: String -> Q [Dec]
quoteDec = \String
_ -> String -> Q [Dec]
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"d10list cannot be used in a declaration context"
}