helium-1.8: src/Helium/CodeGeneration/ToCorePat.ag
ATTR Patterns
[
|
| length : Int
]
ATTR Pattern Patterns
[
|
| vars USE { ++ } { [] } : { [Name] }
]
SEM Patterns
| Cons lhs.length = 1 + @tl.length
| Nil lhs.length = 0
SEM Pattern
| Variable lhs.vars = [ @name.self ]
-- range : Range
-- name : Name
| As lhs.vars = @name.self : @pattern.vars
-- range : Range
-- name : Name
-- pattern : Pattern
{
patternAlwaysSucceeds :: Pattern -> Bool
patternAlwaysSucceeds p =
case p of
Pattern_Variable _ _ -> True
Pattern_Wildcard _ -> True
Pattern_As _ _ pat -> patternAlwaysSucceeds pat
Pattern_Parenthesized _ pat -> patternAlwaysSucceeds pat
_ -> False
patternMatchFail :: String -> Range -> Core.Expr
patternMatchFail nodeDescription range =
var "$primPatternFailPacked"
`app_` packedString (
nodeDescription ++ " ranging from " ++
showPosition start ++ " to " ++
showPosition (getRangeEnd range) ++ " in module " ++
moduleFromPosition start
)
where
start = getRangeStart range
}