{-# LANGUAGE CPP #-}
module GHC.SourceGen.Lit
( HsLit'
, HsOverLit'
, HasLit(..)
, char
, string
, int
, frac
) where
#if MIN_VERSION_ghc(9,2,0)
import GHC.Types.SourceText (mkTHFractionalLit, mkIntegralLit)
import GHC.Data.FastString (fsLit)
#elif MIN_VERSION_ghc(9,0,0)
import GHC.Types.Basic (mkFractionalLit, mkIntegralLit)
import GHC.Data.FastString (fsLit)
#else
import BasicTypes (mkFractionalLit, mkIntegralLit)
import FastString (fsLit)
#endif
import GHC.Hs.Lit
import GHC.Hs.Expr (noExpr, noSyntaxExpr, HsExpr(..))
import GHC.Hs.Pat (Pat(..))
import GHC.SourceGen.Lit.Internal
import GHC.SourceGen.Syntax.Internal
class HasLit e where
lit :: HsLit' -> e
overLit :: HsOverLit' -> e
instance HasLit HsExpr' where
lit :: HsLit' -> HsExpr'
lit = (EpAnn NoEpAnns -> HsLit' -> HsExpr') -> HsLit' -> HsExpr'
forall ann a. (EpAnn ann -> a) -> a
withEpAnnNotUsed XLitE GhcPs -> HsLit' -> HsExpr'
EpAnn NoEpAnns -> HsLit' -> HsExpr'
forall p. XLitE p -> HsLit p -> HsExpr p
HsLit
overLit :: HsOverLit' -> HsExpr'
overLit = (EpAnn NoEpAnns -> HsOverLit' -> HsExpr') -> HsOverLit' -> HsExpr'
forall ann a. (EpAnn ann -> a) -> a
withEpAnnNotUsed XOverLitE GhcPs -> HsOverLit' -> HsExpr'
EpAnn NoEpAnns -> HsOverLit' -> HsExpr'
forall p. XOverLitE p -> HsOverLit p -> HsExpr p
HsOverLit
instance HasLit Pat' where
lit :: HsLit' -> Pat'
lit = (NoExtField -> HsLit' -> Pat') -> HsLit' -> Pat'
forall a. (NoExtField -> a) -> a
noExt XLitPat GhcPs -> HsLit' -> Pat'
NoExtField -> HsLit' -> Pat'
forall p. XLitPat p -> HsLit p -> Pat p
LitPat
overLit :: HsOverLit' -> Pat'
overLit HsOverLit'
l = Pat' -> Pat'
forall a. a -> a
withPlaceHolder
#if MIN_VERSION_ghc(9,4,0)
(Pat' -> Pat') -> Pat' -> Pat'
forall a b. (a -> b) -> a -> b
$ (EpAnn [AddEpAnn]
-> GenLocated (SrcSpanAnn NoEpAnns) HsOverLit'
-> Maybe NoExtField
-> NoExtField
-> Pat')
-> GenLocated (SrcSpanAnn NoEpAnns) HsOverLit'
-> Maybe NoExtField
-> NoExtField
-> Pat'
forall ann a. (EpAnn ann -> a) -> a
withEpAnnNotUsed XNPat GhcPs
-> XRec GhcPs HsOverLit'
-> Maybe (SyntaxExpr GhcPs)
-> SyntaxExpr GhcPs
-> Pat'
EpAnn [AddEpAnn]
-> GenLocated (SrcSpanAnn NoEpAnns) HsOverLit'
-> Maybe NoExtField
-> NoExtField
-> Pat'
forall p.
XNPat p
-> XRec p (HsOverLit p)
-> Maybe (SyntaxExpr p)
-> SyntaxExpr p
-> Pat p
NPat (HsOverLit' -> GenLocated (SrcSpanAnn NoEpAnns) HsOverLit'
forall a ann. a -> GenLocated (SrcSpanAnn ann) a
mkLocated HsOverLit'
l) Maybe NoExtField
forall a. Maybe a
Nothing NoExtField
SyntaxExpr GhcPs
forall (p :: Pass). IsPass p => SyntaxExpr (GhcPass p)
noSyntaxExpr
#else
$ withEpAnnNotUsed NPat (builtLoc l) Nothing noSyntaxExpr
#endif
char :: HasLit e => Char -> e
char :: forall e. HasLit e => Char -> e
char = HsLit' -> e
forall e. HasLit e => HsLit' -> e
lit (HsLit' -> e) -> (Char -> HsLit') -> Char -> e
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SourceText -> Char -> HsLit') -> Char -> HsLit'
forall a. (SourceText -> a) -> a
noSourceText XHsChar GhcPs -> Char -> HsLit'
SourceText -> Char -> HsLit'
forall x. XHsChar x -> Char -> HsLit x
HsChar
string :: HasLit e => String -> e
string :: forall e. HasLit e => String -> e
string = HsLit' -> e
forall e. HasLit e => HsLit' -> e
lit (HsLit' -> e) -> (String -> HsLit') -> String -> e
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SourceText -> FastString -> HsLit') -> FastString -> HsLit'
forall a. (SourceText -> a) -> a
noSourceText XHsString GhcPs -> FastString -> HsLit'
SourceText -> FastString -> HsLit'
forall x. XHsString x -> FastString -> HsLit x
HsString (FastString -> HsLit')
-> (String -> FastString) -> String -> HsLit'
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> FastString
fsLit
int :: HasLit e => Integer -> e
#if MIN_VERSION_ghc(9,4,0)
int :: forall e. HasLit e => Integer -> e
int Integer
n = HsOverLit' -> e
forall e. HasLit e => HsOverLit' -> e
overLit (HsOverLit' -> e) -> HsOverLit' -> e
forall a b. (a -> b) -> a -> b
$ HsOverLit' -> HsOverLit'
forall a. a -> a
withPlaceHolder (HsOverLit' -> HsOverLit') -> HsOverLit' -> HsOverLit'
forall a b. (a -> b) -> a -> b
$ HsOverLit' -> HsOverLit'
forall a. a -> a
withPlaceHolder ((NoExtField -> OverLitVal -> HsOverLit')
-> OverLitVal -> HsOverLit'
forall a. (NoExtField -> a) -> a
noExt XOverLit GhcPs -> OverLitVal -> HsOverLit'
NoExtField -> OverLitVal -> HsOverLit'
forall p. XOverLit p -> OverLitVal -> HsOverLit p
OverLit OverLitVal
n')
#else
int n = overLit $ withPlaceHolder $ withPlaceHolder (noExt OverLit n') noExpr
#endif
where
n' :: OverLitVal
n' = IntegralLit -> OverLitVal
HsIntegral (IntegralLit -> OverLitVal) -> IntegralLit -> OverLitVal
forall a b. (a -> b) -> a -> b
$ Integer -> IntegralLit
forall a. Integral a => a -> IntegralLit
mkIntegralLit Integer
n
frac :: HasLit e => Rational -> e
#if MIN_VERSION_ghc(9,4,0)
frac :: forall e. HasLit e => Rational -> e
frac Rational
x = HsOverLit' -> e
forall e. HasLit e => HsOverLit' -> e
overLit (HsOverLit' -> e) -> HsOverLit' -> e
forall a b. (a -> b) -> a -> b
$ HsOverLit' -> HsOverLit'
forall a. a -> a
withPlaceHolder (HsOverLit' -> HsOverLit') -> HsOverLit' -> HsOverLit'
forall a b. (a -> b) -> a -> b
$ HsOverLit' -> HsOverLit'
forall a. a -> a
withPlaceHolder ((NoExtField -> OverLitVal -> HsOverLit')
-> OverLitVal -> HsOverLit'
forall a. (NoExtField -> a) -> a
noExt XOverLit GhcPs -> OverLitVal -> HsOverLit'
NoExtField -> OverLitVal -> HsOverLit'
forall p. XOverLit p -> OverLitVal -> HsOverLit p
OverLit (OverLitVal -> HsOverLit') -> OverLitVal -> HsOverLit'
forall a b. (a -> b) -> a -> b
$ FractionalLit -> OverLitVal
HsFractional FractionalLit
x')
#else
frac x = overLit $ withPlaceHolder $ withPlaceHolder (noExt OverLit $ HsFractional x') noExpr
#endif
where
#if MIN_VERSION_ghc(9,2,0)
x' :: FractionalLit
x' = Rational -> FractionalLit
mkTHFractionalLit Rational
x
#else
x' = mkFractionalLit x
#endif