@@ -49,11 +49,10 @@ addDataType moduleName name args dctors ctorKind = do
4949addDataConstructor :: ModuleName -> ProperName -> [String] -> ProperName -> [Type] -> Check ()
5050addDataConstructor moduleName name args dctor tys = do
5151 env <- getEnv
52− dataConstructorIsNotDefined moduleName dctor
5352 let retTy = foldl TypeApp (TypeConstructor (Qualified (Just moduleName) name)) (map TypeVar args)
5453 let dctorTy = foldr function retTy tys
5554 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) }
5756
5857addTypeSynonym :: ModuleName -> ProperName -> [String] -> Type -> Kind -> Check ()
5958addTypeSynonym moduleName name args ty kind = do
@@ -67,12 +66,6 @@ typeIsNotDefined moduleName name = do
6766 guardWith (show name ++ " is already defined") $
6867 not $ M.member (moduleName, name) (types env)
6968
70−dataConstructorIsNotDefined :: ModuleName -> ProperName -> Check ()
71−dataConstructorIsNotDefined moduleName dctor = do
72− env <- getEnv
73− guardWith (show dctor ++ " is already defined") $
74− not $ M.member (moduleName, dctor) (dataConstructors env)
75−
7669valueIsNotDefined :: ModuleName -> Ident -> Check ()
7770valueIsNotDefined moduleName name = do
7871 env <- getEnv
@@ -221,12 +214,11 @@ typeCheckAll mainModuleName currentModule (d@(ImportDeclaration moduleName ident
221214 Just (k, _) -> do
222215 guardWith (show currentModule ++ "." ++ show pn ++ " is already defined") $ (currentModule, pn) `M.notMember` types env
223216 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
225218 forM_ keys $ \dctor ->
226− case (moduleName, dctor) `M.lookup` dataConstructors env of
219+ case dctor `M.lookup` dataConstructors env of
227220 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) })
230222 Nothing -> throwError (show moduleName ++ "." ++ show dctor ++ " is undefined")
231223 shadowTypeClassInstances env = do
232224 let instances = filter (\tcd ->