sol / hpack

hpack: A modern format for Haskell packages
MIT License
624 stars 103 forks source link

Duplicate entries in connection with Alex and Happy #406

Closed andreasabel closed 4 years ago

andreasabel commented 4 years ago

This might be the same problem as #353 . From these files in the source directory:

LBNF
├── Abs.hs
├── ErrM.hs
├── Lex.hs
├── Lex.x
├── Par.hs
├── Par.y
├── Print.hs
├── Skel.hs
└── Test.hs

I am getting this entry in the generate .cabal file:

library
  exposed-modules:
      LBNF.Abs
      LBNF.ErrM
      LBNF.Lex
      LBNF.Lex
      LBNF.Par
      LBNF.Par
      LBNF.Print
      LBNF.Skel
      LBNF.Test

Cabal does not like this:

$ hpack && cabal build
generated Foo.cabal
Resolving dependencies...
Error:
    Module name  LBNF.Lex  is exported multiple times.
    In the stanza 'library'
    In the inplace package 'Foo...'

Manually deleting the duplicate entries helps.

Suggestion: nub the generated list.

sol commented 4 years ago

@andreasabel hey! Thanks for bringing this up!

Not opposed to your suggestion of remove duplicates. But I would still want to have the full picture first.

How did Lex.hs/Par.hs end up in your source tree? I would assume that Cabal generates them in dist/build/autogen (or some new-style equivalent).

andreasabel commented 4 years ago

Thanks for the quick fix.

@andreasabel hey! Thanks for bringing this up!

Not opposed to your suggestion of remove duplicates. But I would still want to have the full picture first.

How did Lex.hs/Par.hs end up in your source tree? I would assume that Cabal generates them in dist/build/autogen (or some new-style equivalent).

These files have been sitting in the source tree since I originally did not use any cabal configuration for this project (just a Makefile). To generate a cabal file, I used hpack and then ran into the problem of duplicates.

I think in case of Alex and Happy, my problem can be circumvented by not checking in the generated hs files into the source tree. However, Alex and Happy are natively supported by Cabal. Other build tools (such as my own, BNFC) do not enjoy the support by Cabal. Therefore, I also check in the files generated by the build tool into the source tree.