Update for new extensible matching semantics
This commit is contained in:
parent
956f36c783
commit
83facdeee9
|
@ -22,14 +22,17 @@ Consider the pattern:
|
||||||
<arr [<lit 1> <bind <arr [<bind <_>> <_>]>> <_>]>
|
<arr [<lit 1> <bind <arr [<bind <_>> <_>]>> <_>]>
|
||||||
```
|
```
|
||||||
|
|
||||||
The following values each yield different results:
|
Each of the following values yields different results when matched against it:
|
||||||
|
|
||||||
- `[1 2 3]` fails, because `2` is not an array.
|
- `[1 2 3]` fails, because `2` is not an array.
|
||||||
|
|
||||||
- `[1 [2 3] 4]` succeeds, yielding a binding sequence `[[2 3] 2]`, because the outer `bind`
|
- `[1 [2 3] 4]` succeeds, yielding a binding sequence `[[2 3] 2]`, because the outer `bind`
|
||||||
captures the whole `[2 3]` array, and the inner (nested) `bind` captures the `2`.
|
captures the whole `[2 3]` array, and the inner (nested) `bind` captures the `2`.
|
||||||
|
|
||||||
- `[1 [2 3 4] 5]` fails, because `[2 3 4]` has more than the expected two elements.
|
- `[1 [2] 5]` fails, because `[2]` has fewer than the expected two elements.
|
||||||
|
|
||||||
|
- However, `[1 [2 3 4] 5]` succeeds, yielding a binding sequence `[[2 3 4] 2]`, because
|
||||||
|
`[2 3 4]` has *at least* the expected two elements.
|
||||||
|
|
||||||
- `[1 [<x> <y>] []]` succeeds, yielding a binding sequence `[[<x> <y>] <x>]`. Each discard
|
- `[1 [<x> <y>] []]` succeeds, yielding a binding sequence `[[<x> <y>] <x>]`. Each discard
|
||||||
pattern (`<_>`) ignores the specific input it is given.
|
pattern (`<_>`) ignores the specific input it is given.
|
||||||
|
@ -95,11 +98,13 @@ If the type check fails, the pattern match fails. Otherwise, matching continues:
|
||||||
|
|
||||||
- `rec` patterns compare the label of the input Record against the `label` field in the
|
- `rec` patterns compare the label of the input Record against the `label` field in the
|
||||||
pattern; unless they match literally and exactly, the overall match fails. Otherwise, if the
|
pattern; unless they match literally and exactly, the overall match fails. Otherwise, if the
|
||||||
number of fields in the input does not equal the number expected in the pattern, the match
|
number of fields in the input is smaller than the number expected in the pattern, the match
|
||||||
fails. Otherwise, matching proceeds structurally recursively.
|
fails. Otherwise, matching proceeds structurally recursively at each field specified in
|
||||||
|
the pattern. The pattern ignores fields present in the input but not mentioned in the pattern.
|
||||||
|
|
||||||
- `arr` patterns fail if the number of subpatterns does not match the number of items in the
|
- `arr` patterns fail if the number of subpatterns exceeds the number of items in the
|
||||||
input Sequence. Otherwise, matching proceeds structurally recursively.
|
input Sequence. Otherwise, matching proceeds structurally recursively at each item specified
|
||||||
|
in the pattern. The pattern ignores items present in the input but not mentioned in the pattern.
|
||||||
|
|
||||||
- `dict` patterns consider each of the key/subpattern pairs in `entries` in turn, according to
|
- `dict` patterns consider each of the key/subpattern pairs in `entries` in turn, according to
|
||||||
the Preserves order of the keys.[^dict-pattern-ordering] If any given key from the pattern
|
the Preserves order of the keys.[^dict-pattern-ordering] If any given key from the pattern
|
||||||
|
|
Loading…
Reference in New Issue