ghc-7.8.4: The GHC API

Safe Haskell | None
Language | Haskell98

HsBinds

Synopsis

- type HsLocalBinds id = HsLocalBindsLR id id
- data HsLocalBindsLR idL idR
  - = HsValBinds (HsValBindsLR idL idR)
  - | HsIPBinds (HsIPBinds idR)
  - | EmptyLocalBinds
- type HsValBinds id = HsValBindsLR id id
- data HsValBindsLR idL idR
  - = ValBindsIn (LHsBindsLR idL idR) [LSig idR]
  - | ValBindsOut [(RecFlag, LHsBinds idL)] [LSig Name]
- type LHsBind id = LHsBindLR id id
- type LHsBinds id = LHsBindsLR id id
- type HsBind id = HsBindLR id id
- type LHsBindsLR idL idR = Bag (LHsBindLR idL idR)
- type LHsBindLR idL idR = Located (HsBindLR idL idR)
- data HsBindLR idL idR
  - = FunBind {
    - fun_id :: Located idL
    - fun_infix :: Bool
    - fun_matches :: MatchGroup idR (LHsExpr idR)
    - fun_co_fn :: HsWrapper
    - bind_fvs :: NameSet
    - fun_tick :: Maybe (Tickish Id)
    }
  - | PatBind {
    - pat_lhs :: LPat idL
    - pat_rhs :: GRHSs idR (LHsExpr idR)
    - pat_rhs_ty :: PostTcType
    - bind_fvs :: NameSet
    - pat_ticks :: (Maybe (Tickish Id), [Maybe (Tickish Id)])
    }
  - | VarBind {
    - var_id :: idL
    - var_rhs :: LHsExpr idR
    - var_inline :: Bool
    }
  - | AbsBinds {
    - abs_tvs :: [TyVar]
    - abs_ev_vars :: [EvVar]
    - abs_exports :: [ABExport idL]
    - abs_ev_binds :: TcEvBinds
    - abs_binds :: LHsBinds idL
    }
  - | PatSynBind {
    - patsyn_id :: Located idL
    - bind_fvs :: NameSet
    - patsyn_args :: HsPatSynDetails (Located idR)
    - patsyn_def :: LPat idR
    - patsyn_dir :: HsPatSynDir idR
    }
- data ABExport id = ABE {
  - abe_poly :: id
  - abe_mono :: id
  - abe_wrap :: HsWrapper
  - abe_prags :: TcSpecPrags
  }
- placeHolderNames :: NameSet
- pprLHsBinds :: (OutputableBndr idL, OutputableBndr idR) => LHsBindsLR idL idR -> SDoc
- pprLHsBindsForUser :: (OutputableBndr idL, OutputableBndr idR, OutputableBndr id2) => LHsBindsLR idL idR -> [LSig id2] -> [SDoc]
- pprDeclList :: [SDoc] -> SDoc
- emptyLocalBinds :: HsLocalBindsLR a b
- isEmptyLocalBinds :: HsLocalBindsLR a b -> Bool
- isEmptyValBinds :: HsValBindsLR a b -> Bool
- emptyValBindsIn :: HsValBindsLR a b
- emptyValBindsOut :: HsValBindsLR a b
- emptyLHsBinds :: LHsBindsLR idL idR
- isEmptyLHsBinds :: LHsBindsLR idL idR -> Bool
- plusHsValBinds :: HsValBinds a -> HsValBinds a -> HsValBinds a
- getTypeSigNames :: HsValBinds a -> NameSet
- ppr_monobind :: (OutputableBndr idL, OutputableBndr idR) => HsBindLR idL idR -> SDoc
- pprTicks :: SDoc -> SDoc -> SDoc
- data HsIPBinds id = IPBinds [LIPBind id] TcEvBinds
- isEmptyIPBinds :: HsIPBinds id -> Bool
- type LIPBind id = Located (IPBind id)
- data IPBind id = IPBind (Either HsIPName id) (LHsExpr id)
- type LSig name = Located (Sig name)
- data Sig name
  - = TypeSig [Located name] (LHsType name)
  - | PatSynSig (Located name) (HsPatSynDetails (LHsType name)) (LHsType name) (LHsContext name) (LHsContext name)
  - | GenericSig [Located name] (LHsType name)
  - | IdSig Id
  - | FixSig (FixitySig name)
  - | InlineSig (Located name) InlinePragma
  - | SpecSig (Located name) (LHsType name) InlinePragma
  - | SpecInstSig (LHsType name)
  - | MinimalSig (BooleanFormula (Located name))
- type LFixitySig name = Located (FixitySig name)
- data FixitySig name = FixitySig (Located name) Fixity
- data TcSpecPrags
  - = IsDefaultMethod
  - | SpecPrags [LTcSpecPrag]
- type LTcSpecPrag = Located TcSpecPrag
- data TcSpecPrag = SpecPrag Id HsWrapper InlinePragma
- noSpecPrags :: TcSpecPrags
- hasSpecPrags :: TcSpecPrags -> Bool
- isDefaultMethod :: TcSpecPrags -> Bool
- isFixityLSig :: LSig name -> Bool
- isVanillaLSig :: LSig name -> Bool
- isTypeLSig :: LSig name -> Bool
- isSpecLSig :: LSig name -> Bool
- isSpecInstLSig :: LSig name -> Bool
- isPragLSig :: LSig name -> Bool
- isInlineLSig :: LSig name -> Bool
- isMinimalLSig :: LSig name -> Bool
- hsSigDoc :: Sig name -> SDoc
- ppr_sig :: OutputableBndr name => Sig name -> SDoc
- pprPatSynSig :: OutputableBndr a => a -> Bool -> HsPatSynDetails SDoc -> SDoc -> Maybe SDoc -> Maybe SDoc -> SDoc
- pragBrackets :: SDoc -> SDoc
- pprVarSig :: OutputableBndr id => [id] -> SDoc -> SDoc
- pprSpec :: OutputableBndr id => id -> SDoc -> InlinePragma -> SDoc
- pprTcSpecPrags :: TcSpecPrags -> SDoc
- pprMinimalSig :: OutputableBndr name => BooleanFormula (Located name) -> SDoc
- data HsPatSynDetails a
  - = InfixPatSyn a a
  - | PrefixPatSyn [a]
- data HsPatSynDirLR idL idR
  - = Unidirectional
  - | ImplicitBidirectional
- type HsPatSynDir id = HsPatSynDirLR id id

# Documentation

type HsLocalBinds id = HsLocalBindsLR id id

data HsLocalBindsLR idL idR

Bindings in a 'let' expression or a 'where' clause

Constructors

HsValBinds (HsValBindsLR idL idR) |
HsIPBinds (HsIPBinds idR) |
EmptyLocalBinds |

Instances

(Data idL, Data idR) => Data (HsLocalBindsLR idL idR) |
(OutputableBndr idL, OutputableBndr idR) => Outputable (HsLocalBindsLR idL idR) |
Typeable (* -> * -> *) HsLocalBindsLR |

type HsValBinds id = HsValBindsLR id id

data HsValBindsLR idL idR

Value bindings (not implicit parameters)

Constructors

ValBindsIn (LHsBindsLR idL idR) [LSig idR] | Before renaming RHS; idR is always RdrName Not dependency analysed Recursive by default
ValBindsOut [(RecFlag, LHsBinds idL)] [LSig Name] | After renaming RHS; idR can be Name or Id Dependency analysed, later bindings in the list may depend on earlier ones.

Instances

(Data idL, Data idR) => Data (HsValBindsLR idL idR) |
(OutputableBndr idL, OutputableBndr idR) => Outputable (HsValBindsLR idL idR) |
Typeable (* -> * -> *) HsValBindsLR |

type LHsBind id = LHsBindLR id id

type LHsBinds id = LHsBindsLR id id

type HsBind id = HsBindLR id id

type LHsBindsLR idL idR = Bag (LHsBindLR idL idR)

type LHsBindLR idL idR = Located (HsBindLR idL idR)

data HsBindLR idL idR

Constructors

FunBind | FunBind is used for both functions `f x = e` and variables `f = x -> e` Reason 1: Special case for type inference: see `tcMonoBinds`. Reason 2: Instance decls can only have FunBinds, which is convenient. If you change this, you'll need to change e.g. rnMethodBinds But note that the form `f :: a->a = ...` parses as a pattern binding, just like `(f :: a -> a) = ...`

Fields

fun_id :: Located idL
fun_infix :: Bool

  True => infix declaration

fun_matches :: MatchGroup idR (LHsExpr idR)

  The payload

fun_co_fn :: HsWrapper

  Coercion from the type of the MatchGroup to the type of the Id. Example: `f :: Int -> forall a. a -> a f x y = y` Then the MatchGroup will have type (Int -> a' -> a') (with a free type variable a'). The coercion will take a CoreExpr of this type and convert it to a CoreExpr of type Int -> forall a'. a' -> a' Notice that the coercion captures the free a'.

bind_fvs :: NameSet

  After the renamer, this contains the locally-bound free variables of this defn. See Note [Bind free vars]

fun_tick :: Maybe (Tickish Id)

  Tick to put on the rhs, if any

PatBind | The pattern is never a simple variable; That case is done by FunBind

Fields

pat_lhs :: LPat idL
pat_rhs :: GRHSs idR (LHsExpr idR)
pat_rhs_ty :: PostTcType

  Type of the GRHSs

bind_fvs :: NameSet

  After the renamer, this contains the locally-bound free variables of this defn. See Note [Bind free vars]

pat_ticks :: (Maybe (Tickish Id), [Maybe (Tickish Id)])

  Tick to put on the rhs, if any, and ticks to put on the bound variables.

VarBind | Dictionary binding and suchlike. All VarBinds are introduced by the type checker

Fields

var_id :: idL
var_rhs :: LHsExpr idR

  Located only for consistency

var_inline :: Bool

  True = inline this binding regardless (used for implication constraints only)

AbsBinds |

Fields

abs_tvs :: [TyVar]
abs_ev_vars :: [EvVar]

  Includes equality constraints

abs_exports :: [ABExport idL]

  AbsBinds only gets used when idL = idR after renaming, but these need to be idL's for the collect... code in HsUtil to have the right type

abs_ev_binds :: TcEvBinds

  Evidence bindings

abs_binds :: LHsBinds idL

  Typechecked user bindings

PatSynBind |

Fields

patsyn_id :: Located idL

  Name of the pattern synonym

bind_fvs :: NameSet

  After the renamer, this contains the locally-bound free variables of this defn. See Note [Bind free vars]

patsyn_args :: HsPatSynDetails (Located idR)

  Formal parameter names

patsyn_def :: LPat idR

  Right-hand side

patsyn_dir :: HsPatSynDir idR

  Directionality

Instances

(Data idL, Data idR) => Data (HsBindLR idL idR) |
(OutputableBndr idL, OutputableBndr idR) => Outputable (HsBindLR idL idR) |
Typeable (* -> * -> *) HsBindLR |

data ABExport id

Constructors

ABE |

Fields

abe_poly :: id

  Any INLINE pragmas is attached to this Id

abe_mono :: id
abe_wrap :: HsWrapper

  See Note [AbsBinds wrappers] Shape: (forall abs_tvs. abs_ev_vars => abe_mono) ~ abe_poly

abe_prags :: TcSpecPrags

  SPECIALISE pragmas

Instances

Data id => Data (ABExport id) |
OutputableBndr id => Outputable (ABExport id) |
Typeable (* -> *) ABExport |

placeHolderNames :: NameSet

Used for the NameSet in FunBind and PatBind prior to the renamer

pprLHsBinds :: (OutputableBndr idL, OutputableBndr idR) => LHsBindsLR idL idR -> SDoc

pprLHsBindsForUser :: (OutputableBndr idL, OutputableBndr idR, OutputableBndr id2) => LHsBindsLR idL idR -> [LSig id2] -> [SDoc]

pprDeclList :: [SDoc] -> SDoc

emptyLocalBinds :: HsLocalBindsLR a b

isEmptyLocalBinds :: HsLocalBindsLR a b -> Bool

isEmptyValBinds :: HsValBindsLR a b -> Bool

emptyValBindsIn :: HsValBindsLR a b

emptyValBindsOut :: HsValBindsLR a b

emptyLHsBinds :: LHsBindsLR idL idR

isEmptyLHsBinds :: LHsBindsLR idL idR -> Bool

plusHsValBinds :: HsValBinds a -> HsValBinds a -> HsValBinds a

getTypeSigNames :: HsValBinds a -> NameSet

ppr_monobind :: (OutputableBndr idL, OutputableBndr idR) => HsBindLR idL idR -> SDoc

pprTicks :: SDoc -> SDoc -> SDoc

data HsIPBinds id

Constructors

IPBinds [LIPBind id] TcEvBinds |

Instances

Data id => Data (HsIPBinds id) |
OutputableBndr id => Outputable (HsIPBinds id) |
Typeable (* -> *) HsIPBinds |

isEmptyIPBinds :: HsIPBinds id -> Bool

type LIPBind id = Located (IPBind id)

data IPBind id

Implicit parameter bindings.

Constructors

IPBind (Either HsIPName id) (LHsExpr id) |

Instances

Data id => Data (IPBind id) |
OutputableBndr id => Outputable (IPBind id) |
Typeable (* -> *) IPBind |

type LSig name = Located (Sig name)

data Sig name

Signatures and pragmas

Constructors

TypeSig [Located name] (LHsType name) | An ordinary type signature `f :: Num a => a -> a`
PatSynSig (Located name) (HsPatSynDetails (LHsType name)) (LHsType name) (LHsContext name) (LHsContext name) | A pattern synonym type signature @pattern (Eq b) => P a b :: (Num a) => T a

GenericSig [Located name] (LHsType name)

A type signature for a default method inside a class

    default eq :: (Representable0 a, GEq (Rep0 a)) => a -> a -> Bool

IdSig Id | A type signature in generated code, notably the code generated for record selectors. We simply record the desired Id itself, replete with its name, type and IdDetails. Otherwise it's just like a type signature: there should be an accompanying binding

FixSig (FixitySig name)

An ordinary fixity declaration

        infixl *** 8

InlineSig (Located name) InlinePragma

An inline pragma

    {#- INLINE f #-}

SpecSig (Located name) (LHsType name) InlinePragma

A specialisation pragma

    {-# SPECIALISE f :: Int -> Int #-}

SpecInstSig (LHsType name)

A specialisation pragma for instance declarations only

    {-# SPECIALISE instance Eq [Int] #-}

(Class tys); should be a specialisation of the current instance declaration

MinimalSig (BooleanFormula (Located name))

A minimal complete definition pragma

    {-# MINIMAL a | (b, c | (d | e)) #-}

Instances

Data name => Data (Sig name) |
OutputableBndr name => Outputable (Sig name) |
Typeable (* -> *) Sig |

type LFixitySig name = Located (FixitySig name)

data FixitySig name

Constructors

FixitySig (Located name) Fixity |

Instances

Data name => Data (FixitySig name) |
OutputableBndr name => Outputable (FixitySig name) |
Typeable (* -> *) FixitySig |

data TcSpecPrags

TsSpecPrags conveys pragmas from the type checker to the desugarer

Constructors

IsDefaultMethod | Super-specialised: a default method should be macro-expanded at every call site
SpecPrags [LTcSpecPrag] |

Instances

Data TcSpecPrags |
Typeable * TcSpecPrags |

type LTcSpecPrag = Located TcSpecPrag

data TcSpecPrag

Constructors

SpecPrag Id HsWrapper InlinePragma | The Id to be specialised, an wrapper that specialises the polymorphic function, and inlining spec for the specialised function

Instances

Data TcSpecPrag |
Outputable TcSpecPrag |
Typeable * TcSpecPrag |

noSpecPrags :: TcSpecPrags

hasSpecPrags :: TcSpecPrags -> Bool

isDefaultMethod :: TcSpecPrags -> Bool

isFixityLSig :: LSig name -> Bool

isVanillaLSig :: LSig name -> Bool

isTypeLSig :: LSig name -> Bool

isSpecLSig :: LSig name -> Bool

isSpecInstLSig :: LSig name -> Bool

isPragLSig :: LSig name -> Bool

isInlineLSig :: LSig name -> Bool

isMinimalLSig :: LSig name -> Bool

hsSigDoc :: Sig name -> SDoc

ppr_sig :: OutputableBndr name => Sig name -> SDoc

pprPatSynSig :: OutputableBndr a => a -> Bool -> HsPatSynDetails SDoc -> SDoc -> Maybe SDoc -> Maybe SDoc -> SDoc

pragBrackets :: SDoc -> SDoc

pprVarSig :: OutputableBndr id => [id] -> SDoc -> SDoc

pprSpec :: OutputableBndr id => id -> SDoc -> InlinePragma -> SDoc

pprTcSpecPrags :: TcSpecPrags -> SDoc

pprMinimalSig :: OutputableBndr name => BooleanFormula (Located name) -> SDoc

data HsPatSynDetails a

Constructors

InfixPatSyn a a |
PrefixPatSyn [a] |

Instances

Functor HsPatSynDetails |
Foldable HsPatSynDetails |
Traversable HsPatSynDetails |
Data a => Data (HsPatSynDetails a) |
Typeable (* -> *) HsPatSynDetails |

data HsPatSynDirLR idL idR

Constructors

Unidirectional |
ImplicitBidirectional |

Instances

(Data idL, Data idR) => Data (HsPatSynDirLR idL idR) |
Typeable (* -> * -> *) HsPatSynDirLR |

type HsPatSynDir id = HsPatSynDirLR id id