GHC.Types.SourceText

ghc-lib-parser-9.14.1.20251220: The GHC API, decoupled from GHC versions

Safe Haskell | Ignore
Language | GHC2021

GHC.Types.SourceText

Contents

- Literals

Description

Source text

Keeping Source Text for source to source conversions

Synopsis

- data SourceText
  - = SourceText FastString
  - | NoSourceText
- pprWithSourceText :: SourceText -> SDoc -> SDoc
- data IntegralLit = IL {
  - il_text :: SourceText
  - il_neg :: Bool
  - il_value :: Integer
  }
- data FractionalLit = FL {
  - fl_text :: SourceText
  - fl_neg :: Bool
  - fl_signi :: Rational
  - fl_exp :: Integer
  - fl_exp_base :: FractionalExponentBase
  }
- data StringLiteral = StringLiteral {
  - sl_st :: SourceText
  - sl_fs :: FastString
  - sl_tc :: Maybe NoCommentsLocation
  }
- negateIntegralLit :: IntegralLit -> IntegralLit
- negateFractionalLit :: FractionalLit -> FractionalLit
- mkIntegralLit :: Integral a => a -> IntegralLit
- mkTHFractionalLit :: Rational -> FractionalLit
- rationalFromFractionalLit :: FractionalLit -> Rational
- integralFractionalLit :: Bool -> Integer -> FractionalLit
- mkSourceFractionalLit :: String -> Bool -> Integer -> Integer -> FractionalExponentBase -> FractionalLit
- data FractionalExponentBase
  - = Base2
  - | Base10
- fractionalLitFromRational :: Rational -> FractionalLit
- mkFractionalLit :: SourceText -> Bool -> Rational -> Integer -> FractionalExponentBase -> FractionalLit

# Documentation

data SourceText #

Constructors

SourceText FastString |
NoSourceText | For when code is generated, e.g. TH, deriving. The pretty printer will then make its own representation of the item.

#### Instances

Instances details

NFData SourceText # |
Instance details Defined in GHC.Types.SourceText Methods rnf :: SourceText -> () #
Data SourceText # |
Instance details Defined in GHC.Types.SourceText Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> SourceText -> c SourceText # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c SourceText # toConstr :: SourceText -> Constr # dataTypeOf :: SourceText -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c SourceText) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c SourceText) # gmapT :: (forall b. Data b => b -> b) -> SourceText -> SourceText # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> SourceText -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> SourceText -> r # gmapQ :: (forall d. Data d => d -> u) -> SourceText -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> SourceText -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> SourceText -> m SourceText # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> SourceText -> m SourceText # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> SourceText -> m SourceText #
Show SourceText # |
Instance details Defined in GHC.Types.SourceText Methods showsPrec :: Int -> SourceText -> ShowS # show :: SourceText -> String # showList :: [SourceText] -> ShowS #
NoAnn SourceText # |
Instance details Defined in GHC.Parser.Annotation Methods noAnn :: SourceText #
Binary SourceText # |
Instance details Defined in GHC.Types.SourceText Methods put_ :: WriteBinHandle -> SourceText -> IO () # put :: WriteBinHandle -> SourceText -> IO (Bin SourceText) # get :: ReadBinHandle -> IO SourceText #
Outputable SourceText # |
Instance details Defined in GHC.Types.SourceText Methods ppr :: SourceText -> SDoc #
Eq SourceText # |
Instance details Defined in GHC.Types.SourceText Methods (==) :: SourceText -> SourceText -> Bool # (/=) :: SourceText -> SourceText -> Bool #
type Anno (SourceText, RuleName) # |
Instance details Defined in GHC.Hs.Decls type Anno (SourceText, RuleName) = EpAnnCO

pprWithSourceText :: SourceText -> SDoc -> SDoc #

Special combinator for showing string literals.

# Literals

data IntegralLit #

Integral Literal

Used (instead of Integer) to represent negative zegative zero which is required for NegativeLiterals extension to correctly parse `-0::Double` as negative zero. See also #13211.

Constructors

IL |
Fields il_text :: SourceText il_neg :: Bool il_value :: Integer

#### Instances

Instances details

Data IntegralLit # |
Instance details Defined in GHC.Types.SourceText Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> IntegralLit -> c IntegralLit # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c IntegralLit # toConstr :: IntegralLit -> Constr # dataTypeOf :: IntegralLit -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c IntegralLit) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c IntegralLit) # gmapT :: (forall b. Data b => b -> b) -> IntegralLit -> IntegralLit # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> IntegralLit -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> IntegralLit -> r # gmapQ :: (forall d. Data d => d -> u) -> IntegralLit -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> IntegralLit -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> IntegralLit -> m IntegralLit # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> IntegralLit -> m IntegralLit # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> IntegralLit -> m IntegralLit #
Show IntegralLit # |
Instance details Defined in GHC.Types.SourceText Methods showsPrec :: Int -> IntegralLit -> ShowS # show :: IntegralLit -> String # showList :: [IntegralLit] -> ShowS #
Outputable IntegralLit # |
Instance details Defined in GHC.Types.SourceText Methods ppr :: IntegralLit -> SDoc #
Eq IntegralLit # |
Instance details Defined in GHC.Types.SourceText Methods (==) :: IntegralLit -> IntegralLit -> Bool # (/=) :: IntegralLit -> IntegralLit -> Bool #
Ord IntegralLit # |
Instance details Defined in GHC.Types.SourceText Methods compare :: IntegralLit -> IntegralLit -> Ordering # (<) :: IntegralLit -> IntegralLit -> Bool # (<=) :: IntegralLit -> IntegralLit -> Bool # (>) :: IntegralLit -> IntegralLit -> Bool # (>=) :: IntegralLit -> IntegralLit -> Bool # max :: IntegralLit -> IntegralLit -> IntegralLit # min :: IntegralLit -> IntegralLit -> IntegralLit #

data FractionalLit #

Fractional Literal

Used (instead of Rational) to represent exactly the floating point literal that we encountered in the user's source program. This allows us to pretty-print exactly what the user wrote, which is important e.g. for floating point numbers that can't represented as Doubles (we used to via Double for pretty-printing). See also #2245. Note [FractionalLit representation] in GHC.HsToCore.Match.Literal The actual value then is: sign * fl_signi * (fl_exp_base^fl_exp) where sign = if fl_neg then (-1) else 1

For example FL { fl_neg = True, fl_signi = 5.3, fl_exp = 4, fl_exp_base = Base10 } denotes -5300

Constructors

FL |
Fields fl_text :: SourceText How the value was written in the source fl_neg :: Bool fl_signi :: Rational fl_exp :: Integer fl_exp_base :: FractionalExponentBase

#### Instances

Instances details

Data FractionalLit # |
Instance details Defined in GHC.Types.SourceText Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> FractionalLit -> c FractionalLit # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c FractionalLit # toConstr :: FractionalLit -> Constr # dataTypeOf :: FractionalLit -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c FractionalLit) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c FractionalLit) # gmapT :: (forall b. Data b => b -> b) -> FractionalLit -> FractionalLit # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> FractionalLit -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> FractionalLit -> r # gmapQ :: (forall d. Data d => d -> u) -> FractionalLit -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> FractionalLit -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> FractionalLit -> m FractionalLit # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> FractionalLit -> m FractionalLit # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> FractionalLit -> m FractionalLit #
Show FractionalLit # |
Instance details Defined in GHC.Types.SourceText Methods showsPrec :: Int -> FractionalLit -> ShowS # show :: FractionalLit -> String # showList :: [FractionalLit] -> ShowS #
Outputable FractionalLit # |
Instance details Defined in GHC.Types.SourceText Methods ppr :: FractionalLit -> SDoc #
Eq FractionalLit # | Be wary of using this instance to compare for equal *values* when exponents are large. The same value expressed in different syntactic form won't compare as equal when any of the exponents is >= 100.
Instance details Defined in GHC.Types.SourceText Methods (==) :: FractionalLit -> FractionalLit -> Bool # (/=) :: FractionalLit -> FractionalLit -> Bool #
Ord FractionalLit # | Be wary of using this instance to compare for equal *values* when exponents are large. The same value expressed in different syntactic form won't compare as equal when any of the exponents is >= 100.
Instance details Defined in GHC.Types.SourceText Methods compare :: FractionalLit -> FractionalLit -> Ordering # (<) :: FractionalLit -> FractionalLit -> Bool # (<=) :: FractionalLit -> FractionalLit -> Bool # (>) :: FractionalLit -> FractionalLit -> Bool # (>=) :: FractionalLit -> FractionalLit -> Bool # max :: FractionalLit -> FractionalLit -> FractionalLit # min :: FractionalLit -> FractionalLit -> FractionalLit #

data StringLiteral #

A String Literal in the source, including its original raw format for use by source to source manipulation tools.

Constructors

StringLiteral |
Fields sl_st :: SourceText sl_fs :: FastString sl_tc :: Maybe NoCommentsLocation

#### Instances

Instances details

Data StringLiteral # |
Instance details Defined in GHC.Types.SourceText Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> StringLiteral -> c StringLiteral # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c StringLiteral # toConstr :: StringLiteral -> Constr # dataTypeOf :: StringLiteral -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c StringLiteral) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c StringLiteral) # gmapT :: (forall b. Data b => b -> b) -> StringLiteral -> StringLiteral # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> StringLiteral -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> StringLiteral -> r # gmapQ :: (forall d. Data d => d -> u) -> StringLiteral -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> StringLiteral -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> StringLiteral -> m StringLiteral # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> StringLiteral -> m StringLiteral # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> StringLiteral -> m StringLiteral #
Outputable StringLiteral # |
Instance details Defined in GHC.Types.SourceText Methods ppr :: StringLiteral -> SDoc #
Eq StringLiteral # |
Instance details Defined in GHC.Types.SourceText Methods (==) :: StringLiteral -> StringLiteral -> Bool # (/=) :: StringLiteral -> StringLiteral -> Bool #
type Anno StringLiteral # |
Instance details Defined in GHC.Hs.Binds type Anno StringLiteral = EpAnnCO

negateIntegralLit :: IntegralLit -> IntegralLit #

negateFractionalLit :: FractionalLit -> FractionalLit #

mkIntegralLit :: Integral a => a -> IntegralLit #

mkTHFractionalLit :: Rational -> FractionalLit #

rationalFromFractionalLit :: FractionalLit -> Rational #

integralFractionalLit :: Bool -> Integer -> FractionalLit #

The integer should already be negated if it's negative.

mkSourceFractionalLit :: String -> Bool -> Integer -> Integer -> FractionalExponentBase -> FractionalLit #

The arguments should already be negated if they are negative.

data FractionalExponentBase #

Constructors

Base2 |
Base10 |

#### Instances

Instances details

Data FractionalExponentBase # |
Instance details Defined in GHC.Types.SourceText Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> FractionalExponentBase -> c FractionalExponentBase # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c FractionalExponentBase # toConstr :: FractionalExponentBase -> Constr # dataTypeOf :: FractionalExponentBase -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c FractionalExponentBase) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c FractionalExponentBase) # gmapT :: (forall b. Data b => b -> b) -> FractionalExponentBase -> FractionalExponentBase # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> FractionalExponentBase -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> FractionalExponentBase -> r # gmapQ :: (forall d. Data d => d -> u) -> FractionalExponentBase -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> FractionalExponentBase -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> FractionalExponentBase -> m FractionalExponentBase # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> FractionalExponentBase -> m FractionalExponentBase # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> FractionalExponentBase -> m FractionalExponentBase #
Show FractionalExponentBase # |
Instance details Defined in GHC.Types.SourceText Methods showsPrec :: Int -> FractionalExponentBase -> ShowS # show :: FractionalExponentBase -> String # showList :: [FractionalExponentBase] -> ShowS #
Eq FractionalExponentBase # |
Instance details Defined in GHC.Types.SourceText Methods (==) :: FractionalExponentBase -> FractionalExponentBase -> Bool # (/=) :: FractionalExponentBase -> FractionalExponentBase -> Bool #
Ord FractionalExponentBase # |
Instance details Defined in GHC.Types.SourceText Methods compare :: FractionalExponentBase -> FractionalExponentBase -> Ordering # (<) :: FractionalExponentBase -> FractionalExponentBase -> Bool # (<=) :: FractionalExponentBase -> FractionalExponentBase -> Bool # (>) :: FractionalExponentBase -> FractionalExponentBase -> Bool # (>=) :: FractionalExponentBase -> FractionalExponentBase -> Bool # max :: FractionalExponentBase -> FractionalExponentBase -> FractionalExponentBase # min :: FractionalExponentBase -> FractionalExponentBase -> FractionalExponentBase #

fractionalLitFromRational :: Rational -> FractionalLit #

mkFractionalLit :: SourceText -> Bool -> Rational -> Integer -> FractionalExponentBase -> FractionalLit #