git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Detect conflicting data constructor names
commita33df8ce64c1a9d8418b86aed2afc99052439e5d authorLiam Goodacre <goodacre.liam@gmail.com> dateThu 5 Jan 2017, 21:21 (10 years ago) parentf771df8
2 files changed+11−1
examples/failing/DeclConflictDuplicateCtor.purs+5 src/Language/PureScript/Sugar/Names/Env.hs+6−1
examples/failing/DeclConflictDuplicateCtor.pursnew file+5
@@ -0,0 +1,5 @@
1+-- @shouldFailWith DeclConflict
2+module Main where
3+
4+data T = Fail | Fail
5+
src/Language/PureScript/Sugar/Names/Env.hs+6−1
@@ -242,7 +242,12 @@ exportType
242242 -> m Exports
243243exportType exportMode exps name dctors mn = do
244244 let exTypes = exportedTypes exps
245− let exClasses = exportedTypeClasses exps
245+ exClasses = exportedTypeClasses exps
246+ dctorNameCounts :: [(ProperName 'ConstructorName, Int)]
247+ dctorNameCounts = M.toList $ M.fromListWith (+) (map (,1) dctors)
248+ forM_ dctorNameCounts $ \(dctorName, count) ->
249+ when (count > 1) $
250+ throwDeclConflict (DctorName dctorName) (DctorName dctorName)
246251 case exportMode of
247252 Internal -> do
248253 when (name `M.member` exTypes) $