Note [Handling overloaded and rebindable patterns]
Overloaded patterns and rebindable patterns are desugared in the renamer using the HsPatExpansion mechanism detailed in: Note [Rebindable syntax and XXExprGhcRn] The approach is similar to that of expressions, which is further detailed in Note [Handling overloaded and rebindable constructs] in GHC.Rename.Expr. Here are the patterns that are currently desugared in this way: * ListPat (list patterns [p1,p2,p3]) When (and only when) OverloadedLists is on, desugar to a view pattern: [p1, p2, p3] ==> toList -> [p1, p2, p3] ^^^^^^^^^^^^ built-in (non-overloaded) list pattern NB: the type checker and desugarer still see ListPat, but to them it always means the built-in list pattern. See Note [Desugaring overloaded list patterns] below for more details. We expect to add to this list as we deal with more patterns via the expansion mechanism.
References 3
- Rebindable syntax and XXExprGhcRn GHC.Hs.Expr
- Handling overloaded and rebindable constructs GHC.Rename.Expr
- Desugaring overloaded list patterns GHC.Rename.Pat
Referenced by 2
- Handling overloaded and rebindable constructs GHC.Rename.Expr
- Invertible view patterns GHC.Tc.TyCl.PatSyn