Some as-patterns could be accepted in pattern synonyms
Currently all as-patterns are rejected in pattern synonym definitions, to avoid situations like
pattern P x y <- x@(y:_)
since there's no valid reason to be able to then write something like
f [True] False = ...
this would just lead to confusion.
However, I think we could accept as-patterns where the body of the as-pattern doesn't contain any variable bindings that are accessible via the pattern synonym. In other words, this should be OK:
pattern P x <- x@(y:_)
since it's exactly equivalent to
pattern P x <- x@(_:_)
which I don't think is as confusing as the other example.
I haven't really made up my mind yet if these should be bidirectional; but they certainly could be, by just ignoring the body of the as-pattern in the wrapper; so the following two would be equivalent:
pattern P1 x = [x@(y:_)]
pattern P2 x <- [x@(y:_)]
where
P2 x = [x]
Trac metadata
| Trac field | Value |
|---|---|
| Version | 7.8.3 |
| Type | FeatureRequest |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler (Type checker) |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |