Agda- A dependently typed functional programming language and proof assistant

Safe HaskellNone




matchCompiledE :: CompiledClauses -> MaybeReducedElims -> ReduceM (Reduced (Blocked Elims) Term) Source #

matchCompiledE c es takes a function given by case tree c and and a spine es and tries to apply the function to es.

type Frame = (CompiledClauses, MaybeReducedElims, Elims -> Elims) Source #

A stack entry is a triple consisting of 1. the part of the case tree to continue matching, 2. the current argument vector, and 3. a patch function taking the current argument vector back to the original argument vector.

type Stack = [Frame] Source #

match' :: Stack -> ReduceM (Reduced (Blocked Elims) Term) Source #

match' tries to solve the matching problems on the Stack. In each iteration, the top problem is removed and handled.

If the top problem was a Done, we succeed.

If the top problem was a Case n and the nth argument of the problem is not a constructor or literal, we are stuck, thus, fail.

If we have a branch for the constructor/literal, we put it on the stack to continue. If we do not have a branch, we fall through to the next problem, which should be the corresponding catch-all branch.

An empty stack is an exception that can come only from an incomplete function definition.