HsBinds

ghc-7.8.2: 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 (Origin, 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 Source

data HsLocalBindsLR idL idR Source

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 Source

data HsValBindsLR idL idR Source

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 Source

type LHsBinds id = LHsBindsLR id id Source

type HsBind id = HsBindLR id id Source

type LHsBindsLR idL idR = Bag (Origin, LHsBindLR idL idR) Source

type LHsBindLR idL idR = Located (HsBindLR idL idR) Source

data HsBindLR idL idR Source

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 Source

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 Source

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

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

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

pprDeclList :: [SDoc] -> SDoc Source

emptyLocalBinds :: HsLocalBindsLR a b Source

isEmptyLocalBinds :: HsLocalBindsLR a b -> Bool Source

isEmptyValBinds :: HsValBindsLR a b -> Bool Source

emptyValBindsIn :: HsValBindsLR a b Source

emptyValBindsOut :: HsValBindsLR a b Source

emptyLHsBinds :: LHsBindsLR idL idR Source

isEmptyLHsBinds :: LHsBindsLR idL idR -> Bool Source

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

getTypeSigNames :: HsValBinds a -> NameSet Source

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

pprTicks :: SDoc -> SDoc -> SDoc Source

data HsIPBinds id Source

Constructors

IPBinds [LIPBind id] TcEvBinds |

Instances

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

isEmptyIPBinds :: HsIPBinds id -> Bool Source

type LIPBind id = Located (IPBind id) Source

data IPBind id Source

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) Source

data Sig name Source

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) Source

data FixitySig name Source

Constructors

FixitySig (Located name) Fixity |

Instances

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

data TcSpecPrags Source

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 Source

data TcSpecPrag Source

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 Source

hasSpecPrags :: TcSpecPrags -> Bool Source

isDefaultMethod :: TcSpecPrags -> Bool Source

isFixityLSig :: LSig name -> Bool Source

isVanillaLSig :: LSig name -> Bool Source

isTypeLSig :: LSig name -> Bool Source

isSpecLSig :: LSig name -> Bool Source

isSpecInstLSig :: LSig name -> Bool Source

isPragLSig :: LSig name -> Bool Source

isInlineLSig :: LSig name -> Bool Source

isMinimalLSig :: LSig name -> Bool Source

hsSigDoc :: Sig name -> SDoc Source

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

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

pragBrackets :: SDoc -> SDoc Source

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

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

pprTcSpecPrags :: TcSpecPrags -> SDoc Source

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

data HsPatSynDetails a Source

Constructors

InfixPatSyn a a |
PrefixPatSyn [a] |

Instances

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

data HsPatSynDirLR idL idR Source

Constructors

Unidirectional |
ImplicitBidirectional |

Instances

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

type HsPatSynDir id = HsPatSynDirLR id id Source