From 32f8a3e8a98bf898810ad4bad6e753d7ceaa99d8 Mon Sep 17 00:00:00 2001 From: sebastianselander Date: Fri, 24 Mar 2023 11:27:19 +0100 Subject: [PATCH] duplicate signatures disallowed --- src/TypeChecker/TypeChecker.hs | 5 +++-- test_program | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/TypeChecker/TypeChecker.hs b/src/TypeChecker/TypeChecker.hs index 712c1cd..9f1879b 100644 --- a/src/TypeChecker/TypeChecker.hs +++ b/src/TypeChecker/TypeChecker.hs @@ -85,8 +85,9 @@ checkPrg (Program bs) = do preRun :: [Def] -> Infer () preRun [] = return () preRun (x : xs) = case x of - -- TODO: Check for no overlapping signature definitions - DSig (Sig n t) -> insertSig (coerce n) (Just $ toNew t) >> preRun xs + DSig (Sig n t) -> do + gets (M.member (coerce n) . sigs) >>= flip when (throwError $ "Duplicate signatures for function '" ++ printTree n ++ "'") + insertSig (coerce n) (Just $ toNew t) >> preRun xs DBind (Bind n _ _) -> do s <- gets sigs case M.lookup (coerce n) s of diff --git a/test_program b/test_program index ded8250..eb31907 100644 --- a/test_program +++ b/test_program @@ -21,6 +21,7 @@ data Bool () where { -- Cons x xs => x -- }; +firstIsOne : List (Int) -> Bool () ; firstIsOne : List (Int) -> Bool () ; firstIsOne xs = case xs of { Cons x xs => case x of {