BasicTypes

ghc-7.10.3: The GHC API

Safe Haskell | None
Language | Haskell2010

BasicTypes

Contents

- The OneShotInfo type

Synopsis

- type Version = Int
- bumpVersion :: Version -> Version
- initialVersion :: Version
- type ConTag = Int
- fIRST_TAG :: ConTag
- type Arity = Int
- type RepArity = Int
- type Alignment = Int
- data FunctionOrData
  - = IsFunction
  - | IsData
- data WarningTxt
  - = WarningTxt (Located SourceText) [Located FastString]
  - | DeprecatedTxt (Located SourceText) [Located FastString]
- data Fixity = Fixity Int FixityDirection
- data FixityDirection
  - = InfixL
  - | InfixR
  - | InfixN
- defaultFixity :: Fixity
- maxPrecedence :: Int
- minPrecedence :: Int
- negateFixity :: Fixity
- funTyFixity :: Fixity
- compareFixity :: Fixity -> Fixity -> (Bool, Bool)
- data RecFlag
  - = Recursive
  - | NonRecursive
- isRec :: RecFlag -> Bool
- isNonRec :: RecFlag -> Bool
- boolToRecFlag :: Bool -> RecFlag
- data Origin
  - = FromSource
  - | Generated
- isGenerated :: Origin -> Bool
- type RuleName = FastString
- pprRuleName :: RuleName -> SDoc
- data TopLevelFlag
  - = TopLevel
  - | NotTopLevel
- isTopLevel :: TopLevelFlag -> Bool
- isNotTopLevel :: TopLevelFlag -> Bool
- data OverlapFlag = OverlapFlag {
  - overlapMode :: OverlapMode
  - isSafeOverlap :: Bool
  }
- data OverlapMode
  - = NoOverlap SourceText
  - | Overlappable SourceText
  - | Overlapping SourceText
  - | Overlaps SourceText
  - | Incoherent SourceText
- setOverlapModeMaybe :: OverlapFlag -> Maybe OverlapMode -> OverlapFlag
- hasOverlappingFlag :: OverlapMode -> Bool
- hasOverlappableFlag :: OverlapMode -> Bool
- data Boxity
  - = Boxed
  - | Unboxed
- isBoxed :: Boxity -> Bool
- data TupleSort
  - = BoxedTuple
  - | UnboxedTuple
  - | ConstraintTuple
- tupleSortBoxity :: TupleSort -> Boxity
- boxityNormalTupleSort :: Boxity -> TupleSort
- tupleParens :: TupleSort -> SDoc -> SDoc
- data OneShotInfo
  - = NoOneShotInfo
  - | ProbOneShot
  - | OneShotLam
- noOneShotInfo :: OneShotInfo
- hasNoOneShotInfo :: OneShotInfo -> Bool
- isOneShotInfo :: OneShotInfo -> Bool
- bestOneShot :: OneShotInfo -> OneShotInfo -> OneShotInfo
- worstOneShot :: OneShotInfo -> OneShotInfo -> OneShotInfo
- data OccInfo
  - = NoOccInfo
  - | IAmDead
  - | OneOcc !InsideLam !OneBranch !InterestingCxt
  - | IAmALoopBreaker !RulesOnly
- seqOccInfo :: OccInfo -> ()
- zapFragileOcc :: OccInfo -> OccInfo
- isOneOcc :: OccInfo -> Bool
- isDeadOcc :: OccInfo -> Bool
- isStrongLoopBreaker :: OccInfo -> Bool
- isWeakLoopBreaker :: OccInfo -> Bool
- isNoOcc :: OccInfo -> Bool
- strongLoopBreaker :: OccInfo
- weakLoopBreaker :: OccInfo
- type InsideLam = Bool
- insideLam :: InsideLam
- notInsideLam :: InsideLam
- type OneBranch = Bool
- oneBranch :: OneBranch
- notOneBranch :: OneBranch
- type InterestingCxt = Bool
- data EP a = EP {
  - fromEP :: a
  - toEP :: a
  }
- data DefMethSpec
  - = NoDM
  - | VanillaDM
  - | GenericDM
- data SwapFlag
  - = NotSwapped
  - | IsSwapped
- flipSwap :: SwapFlag -> SwapFlag
- unSwap :: SwapFlag -> (a -> a -> b) -> a -> a -> b
- isSwapped :: SwapFlag -> Bool
- data CompilerPhase
  - = Phase PhaseNum
  - | InitialPhase
- type PhaseNum = Int
- data Activation
  - = NeverActive
  - | AlwaysActive
  - | ActiveBefore PhaseNum
  - | ActiveAfter PhaseNum
- isActive :: CompilerPhase -> Activation -> Bool
- isActiveIn :: PhaseNum -> Activation -> Bool
- isNeverActive :: Activation -> Bool
- isAlwaysActive :: Activation -> Bool
- isEarlyActive :: Activation -> Bool
- data RuleMatchInfo
  - = ConLike
  - | FunLike
- isConLike :: RuleMatchInfo -> Bool
- isFunLike :: RuleMatchInfo -> Bool
- data InlineSpec
  - = Inline
  - | Inlinable
  - | NoInline
  - | EmptyInlineSpec
- isEmptyInlineSpec :: InlineSpec -> Bool
- data InlinePragma = InlinePragma {
  - inl_src :: SourceText
  - inl_inline :: InlineSpec
  - inl_sat :: Maybe Arity
  - inl_act :: Activation
  - inl_rule :: RuleMatchInfo
  }
- defaultInlinePragma :: InlinePragma
- alwaysInlinePragma :: InlinePragma
- neverInlinePragma :: InlinePragma
- dfunInlinePragma :: InlinePragma
- isDefaultInlinePragma :: InlinePragma -> Bool
- isInlinePragma :: InlinePragma -> Bool
- isInlinablePragma :: InlinePragma -> Bool
- isAnyInlinePragma :: InlinePragma -> Bool
- inlinePragmaSpec :: InlinePragma -> InlineSpec
- inlinePragmaSat :: InlinePragma -> Maybe Arity
- inlinePragmaActivation :: InlinePragma -> Activation
- inlinePragmaRuleMatchInfo :: InlinePragma -> RuleMatchInfo
- setInlinePragmaActivation :: InlinePragma -> Activation -> InlinePragma
- setInlinePragmaRuleMatchInfo :: InlinePragma -> RuleMatchInfo -> InlinePragma
- data SuccessFlag
  - = Succeeded
  - | Failed
- succeeded :: SuccessFlag -> Bool
- failed :: SuccessFlag -> Bool
- successIf :: Bool -> SuccessFlag
- data FractionalLit = FL {
  - fl_text :: String
  - fl_value :: Rational
  }
- negateFractionalLit :: FractionalLit -> FractionalLit
- integralFractionalLit :: Integer -> FractionalLit
- newtype HValue = HValue Any
- type SourceText = String

# Documentation

type Version = Int

bumpVersion :: Version -> Version

initialVersion :: Version

type ConTag = Int

Type of the tags associated with each constructor possibility

fIRST_TAG :: ConTag

Tags are allocated from here for real constructors

type Arity = Int

The number of value arguments that can be applied to a value before it does "real work". So: fib 100 has arity 0 x -> fib x has arity 1

type RepArity = Int

The number of represented arguments that can be applied to a value before it does "real work". So: fib 100 has representation arity 0 x -> fib x has representation arity 1 () -> fib (x + y) has representation arity 2

type Alignment = Int

data FunctionOrData

Constructors

IsFunction |
IsData |

Instances

Eq FunctionOrData |
Data FunctionOrData |
Ord FunctionOrData |
Outputable FunctionOrData |
Binary FunctionOrData |

data WarningTxt

Constructors

WarningTxt (Located SourceText) [Located FastString] |
DeprecatedTxt (Located SourceText) [Located FastString] |

Instances

Eq WarningTxt |
Data WarningTxt |
Outputable WarningTxt |
Binary WarningTxt |

data Fixity

Constructors

Fixity Int FixityDirection |

Instances

Eq Fixity |
Data Fixity |
Outputable Fixity |
Binary Fixity |

data FixityDirection

Constructors

InfixL |
InfixR |
InfixN |

Instances

Eq FixityDirection |
Data FixityDirection |
Outputable FixityDirection |
Binary FixityDirection |

defaultFixity :: Fixity

maxPrecedence :: Int

minPrecedence :: Int

negateFixity :: Fixity

funTyFixity :: Fixity

compareFixity :: Fixity -> Fixity -> (Bool, Bool)

data RecFlag

Constructors

Recursive |
NonRecursive |

Instances

Eq RecFlag |
Data RecFlag |
Outputable RecFlag |
Binary RecFlag |

isRec :: RecFlag -> Bool

isNonRec :: RecFlag -> Bool

boolToRecFlag :: Bool -> RecFlag

data Origin

Constructors

FromSource |
Generated |

Instances

Eq Origin |
Data Origin |
Outputable Origin |

isGenerated :: Origin -> Bool

type RuleName = FastString

pprRuleName :: RuleName -> SDoc

data TopLevelFlag

Constructors

TopLevel |
NotTopLevel |

Instances

Outputable TopLevelFlag |

isTopLevel :: TopLevelFlag -> Bool

isNotTopLevel :: TopLevelFlag -> Bool

data OverlapFlag

The semantics allowed for overlapping instances for a particular instance. See Note [Safe Haskell isSafeOverlap] (in `lhs`) for a explanation of the `isSafeOverlap` field.

- `AnnKeywordId` : `AnnOpen` `'{-# OVERLAPPABLE'` or `'{-# OVERLAPPING'` or `'{-# OVERLAPS'` or `'{-# INCOHERENT'`, `AnnClose` ``#-}``,

Constructors

OverlapFlag |
Fields overlapMode :: OverlapMode isSafeOverlap :: Bool

Instances

Eq OverlapFlag |
Data OverlapFlag |
Outputable OverlapFlag |
Binary OverlapFlag |

data OverlapMode

Constructors

NoOverlap SourceText | This instance must not overlap another `NoOverlap` instance. However, it may be overlapped by `Overlapping` instances, and it may overlap `Overlappable` instances.
Overlappable SourceText | Silently ignore this instance if you find a more specific one that matches the constraint you are trying to resolve Example: constraint (Foo [Int]) instance Foo [Int] instance {--} Foo [a] Since the second instance has the Overlappable flag, the first instance will be chosen (otherwise its ambiguous which to choose)
Overlapping SourceText | Silently ignore any more general instances that may be used to solve the constraint. Example: constraint (Foo [Int]) instance {--} Foo [Int] instance Foo [a] Since the first instance has the Overlapping flag, the second---more general---instance will be ignored (otherwise it is ambiguous which to choose)
Overlaps SourceText | Equivalent to having both `Overlapping` and `Overlappable` flags.
Incoherent SourceText | Behave like Overlappable and Overlapping, and in addition pick an an arbitrary one if there are multiple matching candidates, and don't worry about later instantiation Example: constraint (Foo [b]) instance {-# INCOHERENT -} Foo [Int] instance Foo [a] Without the Incoherent flag, we'd complain that instantiating `b` would change which instance was chosen. See also note [Incoherent instances] in InstEnv

Instances

Eq OverlapMode |
Data OverlapMode |
Outputable OverlapMode |
Binary OverlapMode |

setOverlapModeMaybe :: OverlapFlag -> Maybe OverlapMode -> OverlapFlag

hasOverlappingFlag :: OverlapMode -> Bool

hasOverlappableFlag :: OverlapMode -> Bool

data Boxity

Constructors

Boxed |
Unboxed |

Instances

Eq Boxity |
Data Boxity |

isBoxed :: Boxity -> Bool

data TupleSort

Constructors

BoxedTuple |
UnboxedTuple |
ConstraintTuple |

Instances

Eq TupleSort |
Data TupleSort |
Binary TupleSort |

tupleSortBoxity :: TupleSort -> Boxity

boxityNormalTupleSort :: Boxity -> TupleSort

tupleParens :: TupleSort -> SDoc -> SDoc

## The OneShotInfo type

data OneShotInfo

If the `Id` is a lambda-bound variable then it may have lambda-bound variable info. Sometimes we know whether the lambda binding this variable is a "one-shot" lambda; that is, whether it is applied at most once.

This information may be useful in optimisation, as computations may safely be floated inside such a lambda without risk of duplicating work.

Constructors

NoOneShotInfo | No information
ProbOneShot | The lambda is probably applied at most once See Note [Computing one-shot info, and ProbOneShot] in OccurAnl
OneShotLam | The lambda is applied at most once.

Instances

Eq OneShotInfo |
Outputable OneShotInfo |

noOneShotInfo :: OneShotInfo

It is always safe to assume that an `Id` has no lambda-bound variable information

hasNoOneShotInfo :: OneShotInfo -> Bool

isOneShotInfo :: OneShotInfo -> Bool

bestOneShot :: OneShotInfo -> OneShotInfo -> OneShotInfo

worstOneShot :: OneShotInfo -> OneShotInfo -> OneShotInfo

data OccInfo

Identifier occurrence information

Constructors

NoOccInfo | There are many occurrences, or unknown occurrences
IAmDead | Marks unused variables. Sometimes useful for lambda and case-bound variables.
OneOcc !InsideLam !OneBranch !InterestingCxt | Occurs exactly once, not inside a rule
IAmALoopBreaker !RulesOnly | This identifier breaks a loop of mutually recursive functions. The field marks whether it is only a loop breaker due to a reference in a rule

Instances

Eq OccInfo |
Outputable OccInfo |

seqOccInfo :: OccInfo -> ()

zapFragileOcc :: OccInfo -> OccInfo

isOneOcc :: OccInfo -> Bool

isDeadOcc :: OccInfo -> Bool

isStrongLoopBreaker :: OccInfo -> Bool

isWeakLoopBreaker :: OccInfo -> Bool

isNoOcc :: OccInfo -> Bool

strongLoopBreaker :: OccInfo

weakLoopBreaker :: OccInfo

type InsideLam = Bool

insideLam :: InsideLam

notInsideLam :: InsideLam

type OneBranch = Bool

oneBranch :: OneBranch

notOneBranch :: OneBranch

type InterestingCxt = Bool

data EP a

Constructors

EP |
Fields fromEP :: a toEP :: a

data DefMethSpec

Constructors

NoDM |
VanillaDM |
GenericDM |

Instances

Eq DefMethSpec |
Outputable DefMethSpec |
Binary DefMethSpec |

data SwapFlag

Constructors

NotSwapped |
IsSwapped |

Instances

Outputable SwapFlag |

flipSwap :: SwapFlag -> SwapFlag

unSwap :: SwapFlag -> (a -> a -> b) -> a -> a -> b

isSwapped :: SwapFlag -> Bool

data CompilerPhase

Constructors

Phase PhaseNum |
InitialPhase |

Instances

Outputable CompilerPhase |

type PhaseNum = Int

data Activation

Constructors

NeverActive |
AlwaysActive |
ActiveBefore PhaseNum |
ActiveAfter PhaseNum |

Instances

Eq Activation |
Data Activation |
Outputable Activation |
Binary Activation |

isActive :: CompilerPhase -> Activation -> Bool

isActiveIn :: PhaseNum -> Activation -> Bool

isNeverActive :: Activation -> Bool

isAlwaysActive :: Activation -> Bool

isEarlyActive :: Activation -> Bool

data RuleMatchInfo

Constructors

ConLike |
FunLike |

Instances

Eq RuleMatchInfo |
Data RuleMatchInfo |
Show RuleMatchInfo |
Outputable RuleMatchInfo |
Binary RuleMatchInfo |

isConLike :: RuleMatchInfo -> Bool

isFunLike :: RuleMatchInfo -> Bool

data InlineSpec

Constructors

Inline |
Inlinable |
NoInline |
EmptyInlineSpec |

Instances

Eq InlineSpec |
Data InlineSpec |
Show InlineSpec |
Outputable InlineSpec |
Binary InlineSpec |

isEmptyInlineSpec :: InlineSpec -> Bool

data InlinePragma

Constructors

InlinePragma |
Fields inl_src :: SourceText inl_inline :: InlineSpec inl_sat :: Maybe Arity inl_act :: Activation inl_rule :: RuleMatchInfo

Instances

Eq InlinePragma |
Data InlinePragma |
Outputable InlinePragma |
Binary InlinePragma |

defaultInlinePragma :: InlinePragma

alwaysInlinePragma :: InlinePragma

neverInlinePragma :: InlinePragma

dfunInlinePragma :: InlinePragma

isDefaultInlinePragma :: InlinePragma -> Bool

isInlinePragma :: InlinePragma -> Bool

isInlinablePragma :: InlinePragma -> Bool

isAnyInlinePragma :: InlinePragma -> Bool

inlinePragmaSpec :: InlinePragma -> InlineSpec

inlinePragmaSat :: InlinePragma -> Maybe Arity

inlinePragmaActivation :: InlinePragma -> Activation

inlinePragmaRuleMatchInfo :: InlinePragma -> RuleMatchInfo

setInlinePragmaActivation :: InlinePragma -> Activation -> InlinePragma

setInlinePragmaRuleMatchInfo :: InlinePragma -> RuleMatchInfo -> InlinePragma

data SuccessFlag

Constructors

Succeeded |
Failed |

Instances

Outputable SuccessFlag |

succeeded :: SuccessFlag -> Bool

failed :: SuccessFlag -> Bool

successIf :: Bool -> SuccessFlag

data FractionalLit

Constructors

FL |
Fields fl_text :: String fl_value :: Rational

Instances

Eq FractionalLit |
Data FractionalLit |
Ord FractionalLit |
Show FractionalLit |
Outputable FractionalLit |

negateFractionalLit :: FractionalLit -> FractionalLit

integralFractionalLit :: Integer -> FractionalLit

newtype HValue

Constructors

HValue Any |

type SourceText = String