Safe Haskell | None |
---|---|
Language | Haskell2010 |
A syntactic equality check that takes meta instantiations into account,
but does not reduce. It replaces
(v, v') <- instantiateFull (v, v')
v == v'
by a more efficient routine which only traverses and instantiates the terms
as long as they are equal.
Synopsis
- class SynEq a
- checkSyntacticEquality :: (Instantiate a, SynEq a, MonadReduce m) => a -> a -> m ((a, a), Bool)
Documentation
Instantiate full as long as things are equal
synEq
Instances
SynEq Bool Source # | |
SynEq ArgInfo Source # | |
SynEq PlusLevel Source # | |
SynEq Level Source # | |
SynEq Sort Source # | |
SynEq Type Source # | Syntactic equality ignores sorts. |
SynEq Term Source # | Syntactic term equality ignores |
SynEq a => SynEq [a] Source # | |
Defined in Agda.TypeChecking.SyntacticEquality | |
SynEq a => SynEq (Arg a) Source # | |
SynEq a => SynEq (Elim' a) Source # | |
(Subst a, SynEq a) => SynEq (Abs a) Source # | |
SynEq a => SynEq (Dom a) Source # | |
(SynEq a, SynEq b) => SynEq (a, b) Source # | |
Defined in Agda.TypeChecking.SyntacticEquality |
checkSyntacticEquality :: (Instantiate a, SynEq a, MonadReduce m) => a -> a -> m ((a, a), Bool) Source #
Syntactic equality check for terms.
checkSyntacticEquality v v' = do
(v, v') <- instantiateFull (v, v')
return ((v, v'), v==v')
only that v, v'
are only fully instantiated to the depth
where they are equal.
This means in particular that the returned v,v'
cannot be MetaV
s
that are instantiated.