Module: Fusion::AST::Pattern
- Defined in:
- lib/fusion/ast.rb,
lib/fusion/ast.rb
Constant Summary collapse
- PLit =
literal pattern
TypedData.define(value: Atom)
- PErr =
! or !pat ; inner=PWild matches any error
TypedData.define(inner: Pattern)
- PBind =
binds
TypedData.define(name: Identifier)
- PWild =
_
TypedData.define(dummy: NilClass)
- PArr =
[PatternItem|PatternRest], at most one rest
TypedData.define(items: ->(v) { # [PatternItem|PatternRest], at most one rest v.is_a?(Array) && v.all? { |e| PatternItem === e || PatternRest === e } && v.count { |e| PatternRest === e } <= 1 })
- PObj =
[PatternPair|PatternRest], one rest, distinct keys
TypedData.define(pairs: ->(v) { # [PatternPair|PatternRest], one rest, distinct keys v.is_a?(Array) && v.all? { |m| PatternPair === m || PatternRest === m } && v.count { |m| PatternRest === m } <= 1 && v.filter_map { |m| m.key if PatternPair === m }.then { |keys| keys.uniq.size == keys.size } })
- PGuard =
inner ? predicate
TypedData.define(inner: Pattern, pred_expr: Expression)