git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Detect conflicting data constructor names
a33df8cLiam Goodacre
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
242 -> m Exports
242 -> m Exports
243exportType exportMode exps name dctors mn = do
243exportType exportMode exps name dctors mn = do
244 let exTypes = exportedTypes exps
244 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)
246 case exportMode of
251 case exportMode of
247 Internal -> do
252 Internal -> do
248 when (name `M.member` exTypes) $
253 when (name `M.member` exTypes) $