Skip to content

Commit 6e46a60

Browse files
committed
Disallow data constructors from having the same name as their enclosing module purescript#172
1 parent 94bb42f commit 6e46a60

File tree

3 files changed

+4
-3
lines changed

3 files changed

+4
-3
lines changed

purescript.cabal

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: purescript
2-
version: 0.3.9
2+
version: 0.3.9.1
33
cabal-version: >=1.8
44
build-type: Simple
55
license: MIT

src/Language/PureScript/Names.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

5757
instance Show ModuleName where
5858
show (ModuleName name) = show name

src/Language/PureScript/TypeChecker.hs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

4949
addDataConstructor :: ModuleName -> ProperName -> [String] -> ProperName -> Maybe Type -> Check ()
5050
addDataConstructor 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

0 commit comments

Comments
 (0)