Safe Haskell | None |
---|---|
Language | Haskell2010 |
- flexiblePatterns :: [NamedArg Pattern] -> TCM FlexibleVars
- class IsFlexiblePattern a where
- updateInPatterns :: [Dom Type] -> [NamedArg Pattern] -> [Arg DeBruijnPattern] -> TCM ([NamedArg Pattern], [DotPatternInst])
- isSolvedProblem :: Problem -> Bool
- noShadowingOfConstructors :: Call -> Problem -> TCM ()
- checkDotPattern :: DotPatternInst -> TCM ()
- type Projectn = (ProjOrigin, QName)
- type Projectns = [Projectn]
- checkLeftoverDotPatterns :: [NamedArg Pattern] -> [Int] -> [Dom Type] -> [DotPatternInst] -> TCM ()
- bindLHSVars :: [NamedArg Pattern] -> Telescope -> TCM a -> TCM a
- bindAsPatterns :: [AsBinding] -> TCM a -> TCM a
- data LHSResult = LHSResult {}
- checkLeftHandSide :: Call -> Maybe QName -> [NamedArg Pattern] -> Type -> Maybe Substitution -> (LHSResult -> TCM a) -> TCM a
- checkLHS :: Maybe QName -> LHSState -> TCM LHSState
- noPatternMatchingOnCodata :: [NamedArg DeBruijnPattern] -> TCM ()
Documentation
flexiblePatterns :: [NamedArg Pattern] -> TCM FlexibleVars Source #
Compute the set of flexible patterns in a list of patterns. The result is the deBruijn indices of the flexible patterns.
class IsFlexiblePattern a where Source #
A pattern is flexible if it is dotted or implicit, or a record pattern with only flexible subpatterns.
maybeFlexiblePattern :: a -> MaybeT TCM FlexibleVarKind Source #
isFlexiblePattern :: a -> TCM Bool Source #
IsFlexiblePattern Pattern Source # | |
IsFlexiblePattern a => IsFlexiblePattern [a] Source # | Lists of flexible patterns are |
IsFlexiblePattern a => IsFlexiblePattern (Arg a) Source # | |
IsFlexiblePattern (Pattern' a) Source # | |
IsFlexiblePattern a => IsFlexiblePattern (Named name a) Source # | |
:: [Dom Type] | the types of the old pattern variables, relative to the new telescope |
-> [NamedArg Pattern] | old in patterns |
-> [Arg DeBruijnPattern] | patterns to be substituted, living in the new telescope |
-> TCM ([NamedArg Pattern], [DotPatternInst]) |
Update the in patterns according to the given substitution, collecting new dot pattern instantiations in the process.
isSolvedProblem :: Problem -> Bool Source #
Check if a problem is solved. That is, if the patterns are all variables.
noShadowingOfConstructors Source #
For each user-defined pattern variable in the Problem
, check
that the corresponding data type (if any) does not contain a
constructor of the same name (which is not in scope); this
"shadowing" could indicate an error, and is not allowed.
Precondition: The problem has to be solved.
checkDotPattern :: DotPatternInst -> TCM () Source #
Check that a dot pattern matches it's instantiation.
type Projectn = (ProjOrigin, QName) Source #
Temporary data structure for checkLeftoverPatterns
checkLeftoverDotPatterns Source #
:: [NamedArg Pattern] | Leftover patterns after splitting is completed |
-> [Int] | De Bruijn indices of leftover variable patterns computed by splitting |
-> [Dom Type] | Types of leftover patterns |
-> [DotPatternInst] | Instantiations computed by unifier |
-> TCM () |
Checks whether the dot patterns left over after splitting can be covered by shuffling around the dots from implicit positions. Returns the updated user patterns (without dot patterns).
bindLHSVars :: [NamedArg Pattern] -> Telescope -> TCM a -> TCM a Source #
Bind the variables in a left hand side and check that Hiding
of
the patterns matches the hiding info in the type.
Precondition: the patterns should
all be VarP
, WildP
, or AbsurdP
and the
telescope should have the same size as the pattern list.
There could also be ConP
s resulting from eta expanded implicit record
patterns.
Result of checking the LHS of a clause.
LHSResult | |
|
:: Call | Trace, e.g. |
-> Maybe QName | The name of the definition we are checking. |
-> [NamedArg Pattern] | The patterns. |
-> Type | The expected type |
-> Maybe Substitution | Module parameter substitution from with-abstraction. |
-> (LHSResult -> TCM a) | Continuation. |
-> TCM a |
Check a LHS. Main function.
checkLeftHandSide a ps a ret
checks that user patterns ps
eliminate
the type a
of the defined function, and calls continuation ret
if successful.
:: Maybe QName | The name of the definition we are checking. |
-> LHSState | The current state. |
-> TCM LHSState | The final state after all splitting is completed |
The loop (tail-recursive): split at a variable in the problem until problem is solved
noPatternMatchingOnCodata :: [NamedArg DeBruijnPattern] -> TCM () Source #
Ensures that we are not performing pattern matching on codata.