Skip to content
Snippets Groups Projects
Commit a2455d95 authored by David's avatar David
Browse files

Implement Or Patterns (Proposal 0522)

This commit introduces a language extension, `OrPatterns`, as described in proposal 0522.

It extends the syntax by the production
`pat -> (one of pat1, ..., patk)`.
The or-pattern `pat` succeeds iff one of the patterns `pat1`, ..., `patk` succeed, in this order.

Currently, or-patterns cannot bind variables. They are still of great use as they discourage the use of wildcard patterns in favour of writing out all "default" cases explicitly:

```
isIrrefutableHsPat pat = case pat of
  ...
  (one of WildPat{}, VarPat{}, LazyPat{})
      = True
  (one of PArrPat{}, ConPatIn{}, LitPat{}, NPat{}, NPlusKPat{}, ListPat{})
      = False
```

This makes code safer where data types are extended now and then - just like GHC's `Pat` in the example when adding the new `OrPat` constructor. This would be catched by `-fwarn-incomplete-patterns`, but not when a wildcard pattern was used.

- Update submodule haddock.

stuff

Implement empty one of

Prohibit TyApps

Remove unused

update submodule haddock

Update tests

Parser.y
parent ee93edfd
No related branches found
No related tags found
No related merge requests found
Pipeline #82213 failed
Showing
with 409 additions and 142 deletions
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment