diff options
Diffstat (limited to 'src/Haskell/Rewrite.hs')
-rw-r--r-- | src/Haskell/Rewrite.hs | 5 |
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) |