@@ -50,7 +50,7 @@ addDataConstructor moduleName name args dctor maybeTy = do
50 let retTy = foldl TypeApp (TypeConstructor (Qualified (Just moduleName) name)) (map TypeVar args)
50 let retTy = foldl TypeApp (TypeConstructor (Qualified (Just moduleName) name)) (map TypeVar args)
51 let dctorTy = maybe retTy (\ty -> Function [ty] retTy) maybeTy
51 let dctorTy = maybe retTy (\ty -> Function [ty] retTy) maybeTy
52 let polyType = mkForAll args dctorTy
52 let polyType = mkForAll args dctorTy
53− putEnv $ env { dataConstructors = M.insert (moduleName, dctor) polyType (dataConstructors env) }
53+ putEnv $ env { dataConstructors = M.insert (moduleName, dctor) (polyType, DataConstructor) (dataConstructors env) }
55addTypeSynonym :: ModuleName -> ProperName -> [String] -> Type -> Kind -> Check ()
55addTypeSynonym :: ModuleName -> ProperName -> [String] -> Type -> Kind -> Check ()
56addTypeSynonym moduleName name args ty kind = do
56addTypeSynonym moduleName name args ty kind = do
@@ -183,16 +183,16 @@ typeCheckAll currentModule (ImportDeclaration moduleName idents : rest) = do
183 Nothing -> throwError (show moduleName ++ "." ++ show pn ++ " is undefined")
183 Nothing -> throwError (show moduleName ++ "." ++ show pn ++ " is undefined")
184 Just (k, _) -> do
184 Just (k, _) -> do
185 modifyEnv (\e -> e { types = M.insert (currentModule, pn) (k, DataAlias moduleName pn) (types e) })
185 modifyEnv (\e -> e { types = M.insert (currentModule, pn) (k, DataAlias moduleName pn) (types e) })
186− let keys = map (snd . fst) . filter (\(_, fn) -> fn `constructs` pn) . M.toList . dataConstructors $ env
186+ let keys = map (snd . fst) . filter (\(_, (fn, _)) -> fn `constructs` pn) . M.toList . dataConstructors $ env
187 forM_ keys $ \dctor -> do
187 forM_ keys $ \dctor -> do
188 guardWith (show currentModule ++ "." ++ show dctor ++ " is already defined") $ (currentModule, dctor) `M.notMember` dataConstructors env
188 guardWith (show currentModule ++ "." ++ show dctor ++ " is already defined") $ (currentModule, dctor) `M.notMember` dataConstructors env
189 case (moduleName, dctor) `M.lookup` dataConstructors env of
189 case (moduleName, dctor) `M.lookup` dataConstructors env of
190− Just ctorTy -> modifyEnv (\e -> e { dataConstructors = M.insert (currentModule, dctor) ctorTy (dataConstructors e) })
190+ Just (ctorTy, _) -> modifyEnv (\e -> e { dataConstructors = M.insert (currentModule, dctor) (ctorTy, Alias moduleName (Ident (runProperName dctor))) (dataConstructors e) })
191 Nothing -> throwError (show moduleName ++ "." ++ show dctor ++ " is undefined")
191 Nothing -> throwError (show moduleName ++ "." ++ show dctor ++ " is undefined")
192 constructs (TypeConstructor (Qualified (Just mn) pn')) pn
192 constructs (TypeConstructor (Qualified (Just mn) pn')) pn
193 = mn == moduleName && pn' == pn
193 = mn == moduleName && pn' == pn
194 constructs (ForAll _ ty) pn = ty `constructs` pn
194 constructs (ForAll _ ty) pn = ty `constructs` pn
195 constructs (Function _ ty) pn = ty `constructs` pn
195 constructs (Function _ ty) pn = ty `constructs` pn
196 constructs (TypeApp ty _) pn = ty `constructs` pn
196 constructs (TypeApp ty _) pn = ty `constructs` pn
197− constructs fn _ = error $ "Invalid arguments to construct" ++ show fn
197+ constructs fn _ = error $ "Invalid arguments to constructs: " ++ show fn