module Language.Haskell.TH.Lib.Extra (
integralE, simpleValD, maybeD,
pprQ,
reportWarning, reportError,
) where
import Language.Haskell.TH
(Ppr, ppr, Q, runQ,
Name, Dec, sigD, valD, TypeQ, varP, normalB,
ExpQ, litE, integerL)
import Language.Haskell.TH.PprLib (Doc)
import Language.Haskell.TH.Syntax (Quasi, qReport)
integralE :: Integral a => a -> ExpQ
integralE :: a -> ExpQ
integralE = Lit -> ExpQ
litE (Lit -> ExpQ) -> (a -> Lit) -> a -> ExpQ
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> Lit
integerL (Integer -> Lit) -> (a -> Integer) -> a -> Lit
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Integer
forall a. Integral a => a -> Integer
toInteger
simpleValD :: Name -> TypeQ -> ExpQ -> Q [Dec]
simpleValD :: Name -> TypeQ -> ExpQ -> Q [Dec]
simpleValD var :: Name
var typ :: TypeQ
typ expr :: ExpQ
expr = do
Dec
sig <- Name -> TypeQ -> DecQ
sigD Name
var TypeQ
typ
Dec
val <- PatQ -> BodyQ -> [DecQ] -> DecQ
valD (Name -> PatQ
varP Name
var) (ExpQ -> BodyQ
normalB ExpQ
expr) []
[Dec] -> Q [Dec]
forall (m :: * -> *) a. Monad m => a -> m a
return [Dec
sig, Dec
val]
maybeD :: (a -> Q [Dec]) -> Maybe a -> Q [Dec]
maybeD :: (a -> Q [Dec]) -> Maybe a -> Q [Dec]
maybeD = Q [Dec] -> (a -> Q [Dec]) -> Maybe a -> Q [Dec]
forall b a. b -> (a -> b) -> Maybe a -> b
maybe ([Dec] -> Q [Dec]
forall (m :: * -> *) a. Monad m => a -> m a
return [])
pprQ :: (Functor m, Quasi m, Ppr a) => Q a -> m Doc
pprQ :: Q a -> m Doc
pprQ = (a -> Doc) -> m a -> m Doc
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> Doc
forall a. Ppr a => a -> Doc
ppr (m a -> m Doc) -> (Q a -> m a) -> Q a -> m Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Q a -> m a
forall (m :: * -> *) a. Quasi m => Q a -> m a
runQ
reportWarning :: String -> Q ()
reportWarning :: String -> Q ()
reportWarning = Bool -> String -> Q ()
forall (m :: * -> *). Quasi m => Bool -> String -> m ()
qReport Bool
False
reportError :: String -> Q ()
reportError :: String -> Q ()
reportError = Bool -> String -> Q ()
forall (m :: * -> *). Quasi m => Bool -> String -> m ()
qReport Bool
True