@@ -49,11 +49,10 @@ addDataType moduleName name args dctors ctorKind = do
49addDataConstructor :: ModuleName -> ProperName -> [String] -> ProperName -> [Type] -> Check ()
49addDataConstructor :: ModuleName -> ProperName -> [String] -> ProperName -> [Type] -> Check ()
50addDataConstructor moduleName name args dctor tys = do
50addDataConstructor moduleName name args dctor tys = do
51 env <- getEnv
51 env <- getEnv
52− dataConstructorIsNotDefined moduleName dctor
53 let retTy = foldl TypeApp (TypeConstructor (Qualified (Just moduleName) name)) (map TypeVar args)
52 let retTy = foldl TypeApp (TypeConstructor (Qualified (Just moduleName) name)) (map TypeVar args)
54 let dctorTy = foldr function retTy tys
53 let dctorTy = foldr function retTy tys
55 let polyType = mkForAll args dctorTy
54 let polyType = mkForAll args dctorTy
56− putEnv $ env { dataConstructors = M.insert (moduleName, dctor) (qualifyAllUnqualifiedNames moduleName env polyType) (dataConstructors env) }
55+ putEnv $ env { dataConstructors = M.insert (Qualified (Just moduleName) dctor) (qualifyAllUnqualifiedNames moduleName env polyType) (dataConstructors env) }
58addTypeSynonym :: ModuleName -> ProperName -> [String] -> Type -> Kind -> Check ()
57addTypeSynonym :: ModuleName -> ProperName -> [String] -> Type -> Kind -> Check ()
59addTypeSynonym moduleName name args ty kind = do
58addTypeSynonym moduleName name args ty kind = do
@@ -67,12 +66,6 @@ typeIsNotDefined moduleName name = do
67 guardWith (show name ++ " is already defined") $
66 guardWith (show name ++ " is already defined") $
68 not $ M.member (moduleName, name) (types env)
67 not $ M.member (moduleName, name) (types env)
70−dataConstructorIsNotDefined :: ModuleName -> ProperName -> Check ()
71−dataConstructorIsNotDefined moduleName dctor = do
73− guardWith (show dctor ++ " is already defined") $
74− not $ M.member (moduleName, dctor) (dataConstructors env)
76valueIsNotDefined :: ModuleName -> Ident -> Check ()
69valueIsNotDefined :: ModuleName -> Ident -> Check ()
77valueIsNotDefined moduleName name = do
70valueIsNotDefined moduleName name = do
78 env <- getEnv
71 env <- getEnv
@@ -221,12 +214,11 @@ typeCheckAll mainModuleName currentModule (d@(ImportDeclaration moduleName ident
221 Just (k, _) -> do
214 Just (k, _) -> do
222 guardWith (show currentModule ++ "." ++ show pn ++ " is already defined") $ (currentModule, pn) `M.notMember` types env
215 guardWith (show currentModule ++ "." ++ show pn ++ " is already defined") $ (currentModule, pn) `M.notMember` types env
223 modifyEnv (\e -> e { types = M.insert (currentModule, pn) (k, DataAlias moduleName pn) (types e) })
216 modifyEnv (\e -> e { types = M.insert (currentModule, pn) (k, DataAlias moduleName pn) (types e) })
224− let keys = map (snd . fst) . filter (\(_, fn) -> fn `constructs` pn) . M.toList . dataConstructors $ env
217+ let keys = map fst . filter (\(_, fn) -> fn `constructs` pn) . M.toList . dataConstructors $ env
225 forM_ keys $ \dctor ->
218 forM_ keys $ \dctor ->
226− case (moduleName, dctor) `M.lookup` dataConstructors env of
219+ case dctor `M.lookup` dataConstructors env of
227 Just ctorTy -> do
220 Just ctorTy -> do
228− guardWith (show currentModule ++ "." ++ show dctor ++ " is already defined") $ (currentModule, dctor) `M.notMember` dataConstructors env
229− modifyEnv (\e -> e { dataConstructors = M.insert (currentModule, dctor) ctorTy (dataConstructors e) })
221+ modifyEnv (\e -> e { dataConstructors = M.insert dctor ctorTy (dataConstructors e) })
230 Nothing -> throwError (show moduleName ++ "." ++ show dctor ++ " is undefined")
222 Nothing -> throwError (show moduleName ++ "." ++ show dctor ++ " is undefined")
231 shadowTypeClassInstances env = do
223 shadowTypeClassInstances env = do
232 let instances = filter (\tcd ->
224 let instances = filter (\tcd ->