@@ -43,13 +43,14 @@ addDataType moduleName name args dctors ctorKind = do
43 env <- getEnv
43 env <- getEnv
44 putEnv $ env { types = M.insert (moduleName, name) (ctorKind, Data) (types env) }
44 putEnv $ env { types = M.insert (moduleName, name) (ctorKind, Data) (types env) }
45 forM_ dctors $ \(dctor, maybeTy) ->
45 forM_ dctors $ \(dctor, maybeTy) ->
46− rethrow (("Error in data constructor " ++ show name ++ ":\n") ++) $
46+ rethrow (("Error in data constructor " ++ show dctor ++ ":\n") ++) $
47 addDataConstructor moduleName name args dctor maybeTy
47 addDataConstructor moduleName name args dctor maybeTy
49addDataConstructor :: ModuleName -> ProperName -> [String] -> ProperName -> Maybe Type -> Check ()
49addDataConstructor :: ModuleName -> ProperName -> [String] -> ProperName -> Maybe Type -> Check ()
50addDataConstructor moduleName name args dctor maybeTy = do
50addDataConstructor moduleName name args dctor maybeTy = do
51 env <- getEnv
51 env <- getEnv
52 dataConstructorIsNotDefined moduleName dctor
52 dataConstructorIsNotDefined moduleName dctor
53+ when (runModuleName moduleName == dctor) $ throwError "A data constructor may not have the same name as its enclosing module."
53 let retTy = foldl TypeApp (TypeConstructor (Qualified (Just moduleName) name)) (map TypeVar args)
54 let retTy = foldl TypeApp (TypeConstructor (Qualified (Just moduleName) name)) (map TypeVar args)
54 let dctorTy = maybe retTy (flip function retTy) maybeTy
55 let dctorTy = maybe retTy (flip function retTy) maybeTy
55 let polyType = mkForAll args dctorTy
56 let polyType = mkForAll args dctorTy