| Safe Haskell | None | 
|---|---|
| Language | Haskell2010 | 
Agda.TypeChecking.SyntacticEquality
Description
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
Minimal complete definition
synEq
Instances
| SynEq Bool Source # | |
| SynEq ArgInfo Source # | |
| SynEq LevelAtom 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 # | |
| (Subst t a, SynEq a) => SynEq (Abs a) Source # | |
| SynEq a => SynEq (Elim' a) Source # | |
| SynEq a => SynEq (Dom a) Source # | |
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 MetaVs
   that are instantiated.