git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Disallow data constructors from having the same name as their enclosing module #172
commit6e46a60f45eedd211dfc5035584d923fcd629da0 authorPhil Freeman <paf31@cantab.net> dateThu 6 Feb 2014, 11:16 (13 years ago) parent94bb42f
3 files changed+4−3
purescript.cabal+1−1 src/Language/PureScript/Names.hs+1−1 src/Language/PureScript/TypeChecker.hs+2−1
purescript.cabal+1−1
@@ -1,5 +1,5 @@
11name: purescript
2−version: 0.3.9
2+version: 0.3.9.1
33cabal-version: >=1.8
44build-type: Simple
55license: MIT
src/Language/PureScript/Names.hs+1−1
@@ -52,7 +52,7 @@ instance Show ProperName where
5252-- |
5353-- Module names
5454--
55−data ModuleName = ModuleName ProperName deriving (Eq, Ord, Data, Typeable)
55+data ModuleName = ModuleName { runModuleName :: ProperName } deriving (Eq, Ord, Data, Typeable)
5656
5757instance Show ModuleName where
5858 show (ModuleName name) = show name
src/Language/PureScript/TypeChecker.hs+2−1
@@ -43,13 +43,14 @@ addDataType moduleName name args dctors ctorKind = do
4343 env <- getEnv
4444 putEnv $ env { types = M.insert (moduleName, name) (ctorKind, Data) (types env) }
4545 forM_ dctors $ \(dctor, maybeTy) ->
46− rethrow (("Error in data constructor " ++ show name ++ ":\n") ++) $
46+ rethrow (("Error in data constructor " ++ show dctor ++ ":\n") ++) $
4747 addDataConstructor moduleName name args dctor maybeTy
4848
4949addDataConstructor :: ModuleName -> ProperName -> [String] -> ProperName -> Maybe Type -> Check ()
5050addDataConstructor moduleName name args dctor maybeTy = do
5151 env <- getEnv
5252 dataConstructorIsNotDefined moduleName dctor
53+ when (runModuleName moduleName == dctor) $ throwError "A data constructor may not have the same name as its enclosing module."
5354 let retTy = foldl TypeApp (TypeConstructor (Qualified (Just moduleName) name)) (map TypeVar args)
5455 let dctorTy = maybe retTy (flip function retTy) maybeTy
5556 let polyType = mkForAll args dctorTy