X-Git-Url: http://git.megacz.com/?p=coq-hetmet.git;a=blobdiff_plain;f=examples%2FUnify.hs;h=afe34057fa3537ee010ec31421916429b3a38b5e;hp=03d16fc8e6e77a09e1a82152d2aaecdfd9a66b2d;hb=c90b598203ef23bf8d44d6b5b4a5a4b5901039cf;hpb=16d4b9a0378627bc45fe9b070f394c993a4a402a diff --git a/examples/Unify.hs b/examples/Unify.hs index 03d16fc..afe3405 100644 --- a/examples/Unify.hs +++ b/examples/Unify.hs @@ -59,10 +59,10 @@ resolve (Unifier u) v | member v u = v:(concatMap (resolve (Unifier u)) $ occurr occurs :: Unifiable t => Unifier t -> UVar -> t -> Bool occurs u v x = elem v $ concatMap (resolve u) (occurrences x) --- | Given two unifiables, find their most general unifier. Do not override this. +-- | Given two unifiables, find their most general unifier. unify :: Unifiable t => t -> t -> Unifier t unify v1 v2 | (Just v1') <- project v1, (Just v2') <- project v2, v1'==v2' = emptyUnifier -unify v1 v2 | (Just v1') <- project v1 = if occurs emptyUnifier v1' v2 +unify v1 v2 | (Just v1') <- project v1 = if occurs emptyUnifier v1' v2 then error "occurs check failed" else Unifier $ insert v1' v2 empty unify v1 v2 | (Just v2') <- project v2 = unify v2 v1