Module clash checks #416

Open
bergmark opened this Issue Jan 16, 2015 · 6 comments

Comments

Projects
None yet
3 participants
@bergmark
Member

bergmark commented Jan 16, 2015

Does stackage do any checks for conflicting module names? I assumed it did for some reason...

It would be nice to have this!

I just noticed that hxt and our arrow-list both define Control.Arrow.ArrowList. hxt seems to have added this module first so I'll rename ours.

@snoyberg

This comment has been minimized.

Show comment
Hide comment
@snoyberg

snoyberg Jan 16, 2015

Contributor

I have had code in there in the past, but we definitely don't prevent it from occurring. The plan files can trivially be inspected to find such overlaps. Similarly, you could look at the module listing: http://www.stackage.org/lts/docs

Contributor

snoyberg commented Jan 16, 2015

I have had code in there in the past, but we definitely don't prevent it from occurring. The plan files can trivially be inspected to find such overlaps. Similarly, you could look at the module listing: http://www.stackage.org/lts/docs

@bergmark

This comment has been minimized.

Show comment
Hide comment
@bergmark

bergmark Jan 16, 2015

Member
Control.Arrow.ArrowList: hxt-9.3.1.10, arrow-list-0.6.1.5
Control.Monad.Cont: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.Cont.Class: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.Error: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.Error.Class: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.Extra: monad-extras-0.5.9, extra-1.0.1
Control.Monad.Free: free-4.10.0.1, control-monad-free-0.5.3
Control.Monad.Identity: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.List: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.RWS: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.RWS.Class: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.RWS.Lazy: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.RWS.Strict: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.Reader: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.Reader.Class: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.State: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.State.Class: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.State.Lazy: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.State.Strict: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.Trans: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.Writer: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.Writer.Class: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.Writer.Lazy: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.Writer.Strict: mtl-2.1.3.1, monads-tf-0.1.0.2
Crypto.Random: crypto-random-0.0.8, crypto-api-0.13.2
Crypto.Random.API: crypto-random-api-0.2.0, crypto-random-0.0.8
Data.ASN1.BinaryEncoding: asn1-encoding-0.9.0, asn1-data-0.7.1
Data.ASN1.BinaryEncoding.Raw: asn1-encoding-0.9.0, asn1-data-0.7.1
Data.ASN1.BitArray: asn1-types-0.3.0, asn1-data-0.7.1
Data.ASN1.Encoding: asn1-encoding-0.9.0, asn1-data-0.7.1
Data.ASN1.Object: asn1-encoding-0.9.0, asn1-data-0.7.1
Data.ASN1.Parse: asn1-parse-0.9.0, asn1-data-0.7.1
Data.ASN1.Stream: asn1-encoding-0.9.0, asn1-data-0.7.1
Data.ASN1.Types: asn1-types-0.3.0, asn1-data-0.7.1
Data.Accessor: stateref-0.3, data-accessor-0.2.2.6
Data.HashSet: unordered-containers-0.2.5.1, hashmap-1.3.0.1
Data.IntMap.CharMap2: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Data.IntMap.EnumMap2: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Data.IntSet.EnumSet2: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Data.Random.Vector: wordpass-1.0.0.2, random-fu-0.2.6.1
Data.String.UTF8: utf8-string-0.3.8, hxt-unicode-9.0.2.2
Language.Haskell.Lexer: haskell-src-1.0.1.6, haskell-lexer-1.0
Network.Transport: network-transport-0.4.1.0, courier-0.1.0.15
Network.Transport.TCP: network-transport-tcp-0.4.1, courier-0.1.0.15
Numeric: haskell98-2.0.0.3, base-4.7.0.2
Prelude: haskell98-2.0.0.3, base-4.7.0.2
System.FilePath.Glob: Glob-0.7.5, filemanip-0.3.6.2
System.IO.Temp: temporary-rc-1.2.0.3, temporary-1.2.0.3
Test.Framework: test-framework-0.8.1.1, HTF-0.12.2.3
Test.Hspec: nanospec-0.2.0, hspec2-0.6.1, hspec-2.1.2
Test.Hspec.Core: hspec2-0.6.1, hspec-2.1.2
Test.Hspec.Discover: hspec2-0.6.1, hspec-2.1.2
Test.Hspec.Formatters: hspec2-0.6.1, hspec-2.1.2
Test.Hspec.QuickCheck: hspec2-0.6.1, hspec-2.1.2
Test.Hspec.Runner: hspec2-0.6.1, hspec-2.1.2
Test.QuickCheck.Instances: testpack-2.1.3.0, quickcheck-instances-0.3.10, checkers-0.4.1
Text.PrettyPrint.HughesPJClass: pretty-class-1.0.1.1, prettyclass-1.0.0.0
Text.Regex.TDFA: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.ByteString: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.ByteString.Lazy: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.Common: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.CorePattern: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.IntArrTrieSet: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.NewDFA.Engine: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.NewDFA.Engine_FA: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.NewDFA.Engine_NC: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.NewDFA.Engine_NC_FA: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.NewDFA.MakeTest: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.NewDFA.Tester: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.NewDFA.Uncons: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.Pattern: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.ReadRegex: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.Sequence: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.String: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.TDFA: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.TNFA: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Member

bergmark commented Jan 16, 2015

Control.Arrow.ArrowList: hxt-9.3.1.10, arrow-list-0.6.1.5
Control.Monad.Cont: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.Cont.Class: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.Error: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.Error.Class: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.Extra: monad-extras-0.5.9, extra-1.0.1
Control.Monad.Free: free-4.10.0.1, control-monad-free-0.5.3
Control.Monad.Identity: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.List: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.RWS: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.RWS.Class: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.RWS.Lazy: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.RWS.Strict: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.Reader: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.Reader.Class: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.State: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.State.Class: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.State.Lazy: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.State.Strict: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.Trans: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.Writer: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.Writer.Class: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.Writer.Lazy: mtl-2.1.3.1, monads-tf-0.1.0.2
Control.Monad.Writer.Strict: mtl-2.1.3.1, monads-tf-0.1.0.2
Crypto.Random: crypto-random-0.0.8, crypto-api-0.13.2
Crypto.Random.API: crypto-random-api-0.2.0, crypto-random-0.0.8
Data.ASN1.BinaryEncoding: asn1-encoding-0.9.0, asn1-data-0.7.1
Data.ASN1.BinaryEncoding.Raw: asn1-encoding-0.9.0, asn1-data-0.7.1
Data.ASN1.BitArray: asn1-types-0.3.0, asn1-data-0.7.1
Data.ASN1.Encoding: asn1-encoding-0.9.0, asn1-data-0.7.1
Data.ASN1.Object: asn1-encoding-0.9.0, asn1-data-0.7.1
Data.ASN1.Parse: asn1-parse-0.9.0, asn1-data-0.7.1
Data.ASN1.Stream: asn1-encoding-0.9.0, asn1-data-0.7.1
Data.ASN1.Types: asn1-types-0.3.0, asn1-data-0.7.1
Data.Accessor: stateref-0.3, data-accessor-0.2.2.6
Data.HashSet: unordered-containers-0.2.5.1, hashmap-1.3.0.1
Data.IntMap.CharMap2: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Data.IntMap.EnumMap2: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Data.IntSet.EnumSet2: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Data.Random.Vector: wordpass-1.0.0.2, random-fu-0.2.6.1
Data.String.UTF8: utf8-string-0.3.8, hxt-unicode-9.0.2.2
Language.Haskell.Lexer: haskell-src-1.0.1.6, haskell-lexer-1.0
Network.Transport: network-transport-0.4.1.0, courier-0.1.0.15
Network.Transport.TCP: network-transport-tcp-0.4.1, courier-0.1.0.15
Numeric: haskell98-2.0.0.3, base-4.7.0.2
Prelude: haskell98-2.0.0.3, base-4.7.0.2
System.FilePath.Glob: Glob-0.7.5, filemanip-0.3.6.2
System.IO.Temp: temporary-rc-1.2.0.3, temporary-1.2.0.3
Test.Framework: test-framework-0.8.1.1, HTF-0.12.2.3
Test.Hspec: nanospec-0.2.0, hspec2-0.6.1, hspec-2.1.2
Test.Hspec.Core: hspec2-0.6.1, hspec-2.1.2
Test.Hspec.Discover: hspec2-0.6.1, hspec-2.1.2
Test.Hspec.Formatters: hspec2-0.6.1, hspec-2.1.2
Test.Hspec.QuickCheck: hspec2-0.6.1, hspec-2.1.2
Test.Hspec.Runner: hspec2-0.6.1, hspec-2.1.2
Test.QuickCheck.Instances: testpack-2.1.3.0, quickcheck-instances-0.3.10, checkers-0.4.1
Text.PrettyPrint.HughesPJClass: pretty-class-1.0.1.1, prettyclass-1.0.0.0
Text.Regex.TDFA: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.ByteString: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.ByteString.Lazy: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.Common: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.CorePattern: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.IntArrTrieSet: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.NewDFA.Engine: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.NewDFA.Engine_FA: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.NewDFA.Engine_NC: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.NewDFA.Engine_NC_FA: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.NewDFA.MakeTest: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.NewDFA.Tester: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.NewDFA.Uncons: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.Pattern: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.ReadRegex: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.Sequence: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.String: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.TDFA: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
Text.Regex.TDFA.TNFA: regex-tdfa-rc-1.1.8.3, regex-tdfa-1.2.0
@snoyberg

This comment has been minimized.

Show comment
Hide comment
@snoyberg

snoyberg Jan 16, 2015

Contributor

Bingo :). You think it would be useful to have a page on stackage.org for each snapshot with the conflicting module names?

Pinging @chrisdone

Contributor

snoyberg commented Jan 16, 2015

Bingo :). You think it would be useful to have a page on stackage.org for each snapshot with the conflicting module names?

Pinging @chrisdone

@bergmark

This comment has been minimized.

Show comment
Hide comment
@bergmark

bergmark Jan 16, 2015

Member

Ideally, the flows I imagine would be to check for conflicts before adding new packages to stackage with travis, and allowing maintainers to check before releasing a new version of a package (stackage-check tool?)

Perhaps this listing would be useful for stackage snapshot users, but I'm not one of those yet.

Member

bergmark commented Jan 16, 2015

Ideally, the flows I imagine would be to check for conflicts before adding new packages to stackage with travis, and allowing maintainers to check before releasing a new version of a package (stackage-check tool?)

Perhaps this listing would be useful for stackage snapshot users, but I'm not one of those yet.

@chrisdone

This comment has been minimized.

Show comment
Hide comment
@chrisdone

chrisdone Jan 18, 2015

Member

Hm, I think a check like that in the travis build would also imply a section in build-constraints.yaml which lets you say that it's okay for two packages to export the same module names? Such as the ones above, otherwise they'd be warning every build. But for new packages, it'd flag that up immediately, like in @bergmark's case here.

Member

chrisdone commented Jan 18, 2015

Hm, I think a check like that in the travis build would also imply a section in build-constraints.yaml which lets you say that it's okay for two packages to export the same module names? Such as the ones above, otherwise they'd be warning every build. But for new packages, it'd flag that up immediately, like in @bergmark's case here.

@bergmark

This comment has been minimized.

Show comment
Hide comment
@bergmark

bergmark Jan 19, 2015

Member

Sounds good!

Member

bergmark commented Jan 19, 2015

Sounds good!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment