Note [Multiplicity annotations]
Multiplicity annotations are stored in the pat_mult field on PatBinds, represented by the HsMultAnn data type HsNoMultAnn <=> no annotation in the source file HsPct1Ann <=> the %1 annotation HsMultAnn <=> the %t annotation, where `t` is some type In case of HsNoMultAnn the typechecker infers a multiplicity. We don't need to store a multiplicity on FunBinds: - let %1 x = … is parsed as a PatBind. So we don't need an annotation before typechecking. - the multiplicity that the typechecker infers is stored in the binder's Var for the desugarer to use. It's only relevant for strict FunBinds, see Wrinkle 1 in Note [Desugar Strict binds] in GHC.HsToCore.Binds as, in Core, let expressions don't have multiplicity annotations.
References 1
- Desugar Strict binds GHC.HsToCore.Binds
Referenced by 2
- Non-variable pattern bindings aren't linear GHC.Tc.Gen.Bind
- Language.Haskell.Syntax.Binds call site