From f20b80cab328fed5c1a35040f46493f0166a22a6 Mon Sep 17 00:00:00 2001 From: sebastian Date: Tue, 28 Mar 2023 23:19:04 +0200 Subject: [PATCH] added skomeliation on given type signatures --- src/TypeChecker/TypeCheckerHm.hs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/TypeChecker/TypeCheckerHm.hs b/src/TypeChecker/TypeCheckerHm.hs index 5208e7a..3d1121e 100644 --- a/src/TypeChecker/TypeCheckerHm.hs +++ b/src/TypeChecker/TypeCheckerHm.hs @@ -66,7 +66,7 @@ preRun (x : xs) = case x of "Duplicate signatures for function" quote $ printTree n ) - insertSig (coerce n) (Just t) >> preRun xs + insertSig (coerce n) (Just $ skolemize t) >> preRun xs DBind (Bind n _ e) -> do collect (collectTVars e) s <- gets sigs @@ -538,6 +538,12 @@ fresh = do next 'z' = 'a' next a = succ a +skolemize :: Type -> Type +skolemize (TVar (MkTVar a)) = TEVar $ MkTEVar a +skolemize (TAll x t) = TAll x (skolemize t) +skolemize (TFun t1 t2) = (TFun `on` skolemize) t1 t2 +skolemize t = t + -- | A class for substitutions class SubstType t where -- | Apply a substitution to t