HORIZON HASKELLDocslts/ghc-9.10.xc74966e2026-09-27Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · c74966e · 2026-09-27

ModuleAgda-2.7.0.1Haskell2010

Agda.TypeChecking.SyntacticEquality

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.

  • 1 class
  • 3 values
  • PackageAgda-2.7.0.1
  • Exports4
  • LanguageHaskell2010
  • LicenceMIT
  • SourceSyntacticEquality.hs
classclass SynEq a where
#

Instantiate full as long as things are equal

Instances13SynEq, …
  • SynEq ArgInfoDefined in Agda-2.7.0.1 · Agda.TypeChecking.SyntacticEquality
  • SynEq LevelDefined in Agda-2.7.0.1 · Agda.TypeChecking.SyntacticEquality
  • SynEq PlusLevelDefined in Agda-2.7.0.1 · Agda.TypeChecking.SyntacticEquality
  • SynEq SortDefined in Agda-2.7.0.1 · Agda.TypeChecking.SyntacticEquality
  • SynEq TermDefined in Agda-2.7.0.1 · Agda.TypeChecking.SyntacticEquality

    Syntactic term equality ignores DontCare stuff.

  • SynEq TypeDefined in Agda-2.7.0.1 · Agda.TypeChecking.SyntacticEquality

    Syntactic equality ignores sorts.

  • SynEq BoolDefined in Agda-2.7.0.1 · Agda.TypeChecking.SyntacticEquality
  • SynEq a => SynEq (Arg a)Defined in Agda-2.7.0.1 · Agda.TypeChecking.SyntacticEquality
  • SynEq a => SynEq (Dom a)Defined in Agda-2.7.0.1 · Agda.TypeChecking.SyntacticEquality
  • SynEq a => SynEq (Elim' a)Defined in Agda-2.7.0.1 · Agda.TypeChecking.SyntacticEquality
  • SynEq a => SynEq [a]Defined in Agda-2.7.0.1 · Agda.TypeChecking.SyntacticEquality
  • (Subst a, SynEq a) => SynEq (Abs a)Defined in Agda-2.7.0.1 · Agda.TypeChecking.SyntacticEquality
  • (SynEq a, SynEq b) => SynEq (a, b)Defined in Agda-2.7.0.1 · Agda.TypeChecking.SyntacticEquality
valuecheckSyntacticEquality
  1. :: (Instantiate a, SynEq a, MonadReduce m)
  2. => a
  3. -> a
  4. -> (a -> a -> m b)

    Continuation used upon success.

  5. -> (a -> a -> m b)

    Continuation used upon failure, or if syntactic equality checking has been turned off.

  6. -> m b
#

Syntactic equality check for terms. If syntactic equality checking has fuel left, then checkSyntacticEquality behaves as if it were implemented in the following way (which does not match the given type signature), only that v and v' are only fully instantiated to the depth where they are equal (and the amount of fuel is reduced by one unit in the failure branch): checkSyntacticEquality v v' s f = do (v, v') <- instantiateFull (v, v') if v == v' then s v v' else f v v' If syntactic equality checking does not have fuel left, then checkSyntacticEquality instantiates the two terms and takes the failure branch.

Note that in either case the returned values v and v' cannot be MetaVs that are instantiated.

valuecheckSyntacticEquality'
  1. :: (Instantiate a, SynEq a, MonadReduce m)
  2. => a
  3. -> a
  4. -> (a -> a -> m b)

    Continuation used upon success.

  5. -> (a -> a -> m b)

    Continuation used upon failure.

  6. -> m b
#

Syntactic equality check for terms without checking remaining fuel.