aboutsummaryrefslogtreecommitdiff
path: root/src/Haskell/Rewrite.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Haskell/Rewrite.hs')
-rw-r--r--src/Haskell/Rewrite.hs5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/Haskell/Rewrite.hs b/src/Haskell/Rewrite.hs
index 7eaadea..498ccae 100644
--- a/src/Haskell/Rewrite.hs
+++ b/src/Haskell/Rewrite.hs
@@ -79,8 +79,10 @@ unify :: Pat -> Expr -> Maybe (Map.Map Name Expr)
unify PatAny _ = Just Map.empty
unify (PatVar n) e = Just (Map.singleton n e)
unify (PatCon n ps) (App n' es)
- | n' == Ref n, length ps == length es =
+ | n' == Con n, length ps == length es =
foldM (\m (p, e) -> unify p e >>= reconcile m) Map.empty (zip ps es)
+unify (PatCon n []) (Con n')
+ | n == n' = Just Map.empty
unify (PatTup ps) (Tup es)
| length ps == length es =
foldM (\m (p, e) -> unify p e >>= reconcile m) Map.empty (zip ps es)
@@ -101,6 +103,7 @@ normalise e = recurse id normalise e
recurse :: (Pat -> Pat) -> (Expr -> Expr) -> Expr -> Expr
recurse _ f (App e as) = App (f e) (map f as)
recurse _ _ (Ref n) = Ref n
+recurse _ _ (Con n) = Con n
recurse _ _ (Num k) = Num k
recurse _ f (Tup es) = Tup (map f es)
recurse _ f (Lam ns e) = Lam ns (f e)