| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Agda.TypeChecking.Rules.LHS
- 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.
Minimal complete definition
Methods
maybeFlexiblePattern :: a -> MaybeT TCM FlexibleVarKind Source #
isFlexiblePattern :: a -> TCM Bool Source #
Instances
| 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 # | |
Arguments
| :: [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 #
Arguments
| :: [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 ConPs resulting from eta expanded implicit record
patterns.
Result of checking the LHS of a clause.
Constructors
| LHSResult | |
Fields
| |
Instances
Arguments
| :: 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.
Arguments
| :: 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.