GHC.Types.SourceText

ghc-9.2.0.20210331: The GHC API

Safe Haskell | Safe-Inferred
Language | Haskell2010

GHC.Types.SourceText

Contents

- Literals

Description

Source text

Keeping Source Text for source to source conversions

Synopsis

- data SourceText
  - = SourceText String
  - | 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 RealSrcSpan
  }
- 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 Source #

Constructors

SourceText String |
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

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 Source # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c SourceText Source # toConstr :: SourceText -> Constr Source # dataTypeOf :: SourceText -> DataType Source # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c SourceText) Source # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c SourceText) Source # gmapT :: (forall b. Data b => b -> b) -> SourceText -> SourceText Source # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> SourceText -> r Source # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> SourceText -> r Source # gmapQ :: (forall d. Data d => d -> u) -> SourceText -> [u] Source # gmapQi :: Int -> (forall d. Data d => d -> u) -> SourceText -> u Source # gmapM :: Monad m => (forall d. Data d => d -> m d) -> SourceText -> m SourceText Source # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> SourceText -> m SourceText Source # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> SourceText -> m SourceText Source #
Show SourceText # |
Instance details Defined in GHC.Types.SourceText Methods showsPrec :: Int -> SourceText -> ShowS Source # show :: SourceText -> String Source # showList :: [SourceText] -> ShowS Source #
Binary SourceText # |
Instance details Defined in GHC.Types.SourceText Methods put_ :: BinHandle -> SourceText -> IO () Source # put :: BinHandle -> SourceText -> IO (Bin SourceText) Source # get :: BinHandle -> IO SourceText Source #
Outputable SourceText # |
Instance details Defined in GHC.Types.SourceText Methods ppr :: SourceText -> SDoc Source #
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) = SrcSpan
type Anno (SourceText, RuleName) # |
Instance details Defined in GHC.Hs.Decls type Anno (SourceText, RuleName) = SrcSpan

pprWithSourceText :: SourceText -> SDoc -> SDoc Source #

Special combinator for showing string literals.

# Literals

data IntegralLit Source #

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

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 Source # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c FractionalLit Source # toConstr :: FractionalLit -> Constr Source # dataTypeOf :: FractionalLit -> DataType Source # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c FractionalLit) Source # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c FractionalLit) Source # gmapT :: (forall b. Data b => b -> b) -> FractionalLit -> FractionalLit Source # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> FractionalLit -> r Source # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> FractionalLit -> r Source # gmapQ :: (forall d. Data d => d -> u) -> FractionalLit -> [u] Source # gmapQi :: Int -> (forall d. Data d => d -> u) -> FractionalLit -> u Source # gmapM :: Monad m => (forall d. Data d => d -> m d) -> FractionalLit -> m FractionalLit Source # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> FractionalLit -> m FractionalLit Source # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> FractionalLit -> m FractionalLit Source #
Show FractionalLit # |
Instance details Defined in GHC.Types.SourceText Methods showsPrec :: Int -> FractionalLit -> ShowS Source # show :: FractionalLit -> String Source # showList :: [FractionalLit] -> ShowS Source #
Outputable FractionalLit # |
Instance details Defined in GHC.Types.SourceText Methods ppr :: FractionalLit -> SDoc Source #
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 Source #

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 RealSrcSpan

#### 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 Source # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c StringLiteral Source # toConstr :: StringLiteral -> Constr Source # dataTypeOf :: StringLiteral -> DataType Source # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c StringLiteral) Source # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c StringLiteral) Source # gmapT :: (forall b. Data b => b -> b) -> StringLiteral -> StringLiteral Source # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> StringLiteral -> r Source # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> StringLiteral -> r Source # gmapQ :: (forall d. Data d => d -> u) -> StringLiteral -> [u] Source # gmapQi :: Int -> (forall d. Data d => d -> u) -> StringLiteral -> u Source # gmapM :: Monad m => (forall d. Data d => d -> m d) -> StringLiteral -> m StringLiteral Source # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> StringLiteral -> m StringLiteral Source # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> StringLiteral -> m StringLiteral Source #
Binary StringLiteral # |
Instance details Defined in GHC.Types.SourceText Methods put_ :: BinHandle -> StringLiteral -> IO () Source # put :: BinHandle -> StringLiteral -> IO (Bin StringLiteral) Source # get :: BinHandle -> IO StringLiteral Source #
Outputable StringLiteral # |
Instance details Defined in GHC.Types.SourceText Methods ppr :: StringLiteral -> SDoc Source #
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 = SrcSpan

negateIntegralLit :: IntegralLit -> IntegralLit Source #

negateFractionalLit :: FractionalLit -> FractionalLit Source #

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

mkTHFractionalLit :: Rational -> FractionalLit Source #

rationalFromFractionalLit :: FractionalLit -> Rational Source #

integralFractionalLit :: Bool -> Integer -> FractionalLit Source #

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

data FractionalExponentBase Source #

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 Source # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c FractionalExponentBase Source # toConstr :: FractionalExponentBase -> Constr Source # dataTypeOf :: FractionalExponentBase -> DataType Source # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c FractionalExponentBase) Source # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c FractionalExponentBase) Source # gmapT :: (forall b. Data b => b -> b) -> FractionalExponentBase -> FractionalExponentBase Source # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> FractionalExponentBase -> r Source # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> FractionalExponentBase -> r Source # gmapQ :: (forall d. Data d => d -> u) -> FractionalExponentBase -> [u] Source # gmapQi :: Int -> (forall d. Data d => d -> u) -> FractionalExponentBase -> u Source # gmapM :: Monad m => (forall d. Data d => d -> m d) -> FractionalExponentBase -> m FractionalExponentBase Source # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> FractionalExponentBase -> m FractionalExponentBase Source # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> FractionalExponentBase -> m FractionalExponentBase Source #
Show FractionalExponentBase # |
Instance details Defined in GHC.Types.SourceText Methods showsPrec :: Int -> FractionalExponentBase -> ShowS Source # show :: FractionalExponentBase -> String Source # showList :: [FractionalExponentBase] -> ShowS Source #
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 Source #

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