Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TH Generates dupicate pattern synonyms if type is in AST multiple times #32

Closed
arianvp opened this issue Aug 5, 2018 · 1 comment
Closed
Assignees

Comments

@arianvp
Copy link
Collaborator

arianvp commented Aug 5, 2018

When a datatype occurs multiple times within another datatype,
multiple pattern synonyms are generated, leading to invalid haskell code

see b0818ae for triggering the bug

@arianvp
Copy link
Collaborator Author

arianvp commented Aug 5, 2018

[nix-shell:~/Projects/generics/lol]$ runhaskell Setup.hs build --ghc-options="-ddump-splices -ddump-to-file"
Preprocessing library for generics-mrsop-1.1.1..
Building library for generics-mrsop-1.1.1..
[17 of 18] Compiling Generics.MRSOP.Examples.SimpTH ( src/Generics/MRSOP/Examples/SimpTH.hs, dist/build/Generics/MRSOP/Examples/SimpTH.o )

src/Generics/MRSOP/Examples/SimpTH.hs:65:1: error:
    Multiple declarations of ‘Nothing_’
    Declared at: src/Generics/MRSOP/Examples/SimpTH.hs:65:1
                 src/Generics/MRSOP/Examples/SimpTH.hs:65:1
   |
65 | deriveFamilyWith ''Singl [t| Stmt String |]
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

src/Generics/MRSOP/Examples/SimpTH.hs:65:1: error:
    Multiple declarations of ‘Just_’
    Declared at: src/Generics/MRSOP/Examples/SimpTH.hs:65:1
                 src/Generics/MRSOP/Examples/SimpTH.hs:65:1
   |
65 | deriveFamilyWith ''Singl [t| Stmt String |]
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Generated splice:

    pattern SAssign_ p_a8S9 p_a8Sa = Tag CZ
                                         (NA_K p_a8S9 :* (NA_I p_a8Sa :* NP0))
    pattern SIf_ p_a8Sb p_a8Sc p_a8Sd = Tag (CS CZ)
                                            (NA_I p_a8Sb :* (NA_I p_a8Sc :* (NA_I p_a8Sd :* NP0)))
    pattern SSeq_ p_a8Se p_a8Sf = Tag (CS (CS CZ))
                                      (NA_I p_a8Se :* (NA_I p_a8Sf :* NP0))
    pattern SReturn_ p_a8Sg = Tag (CS (CS (CS CZ)))
                                  (NA_I p_a8Sg :* NP0)
    pattern SDecl_ p_a8Sh = Tag (CS (CS (CS (CS CZ))))
                                (NA_I p_a8Sh :* NP0)
    pattern SSkip_ = Tag (CS (CS (CS (CS (CS CZ))))) NP0
    pattern EVar_ p_a8Si = Tag CZ (NA_K p_a8Si :* NP0)
    pattern ECall_ p_a8Sj p_a8Sk = Tag (CS CZ)
                                       (NA_K p_a8Sj :* (NA_I p_a8Sk :* NP0))
    pattern EAdd_ p_a8Sl p_a8Sm = Tag (CS (CS CZ))
                                      (NA_I p_a8Sl :* (NA_I p_a8Sm :* NP0))
    pattern ESub_ p_a8Sn p_a8So = Tag (CS (CS (CS CZ)))
                                      (NA_I p_a8Sn :* (NA_I p_a8So :* NP0))
    pattern Foo_ p_a8Sp = Tag (CS (CS (CS (CS CZ))))
                              (NA_I p_a8Sp :* NP0)
    pattern BBar_ p_a8Sq = Tag (CS (CS (CS (CS (CS CZ)))))
                               (NA_I p_a8Sq :* NP0)
    pattern ELit_ p_a8Sr = Tag (CS (CS (CS (CS (CS (CS CZ))))))
                               (NA_K p_a8Sr :* NP0)
    pattern DVar_ p_a8Ss = Tag CZ (NA_K p_a8Ss :* NP0)
    pattern DFun_ p_a8St p_a8Su p_a8Sv = Tag (CS CZ)
                                             (NA_K p_a8St :* (NA_K p_a8Su :* (NA_I p_a8Sv :* NP0)))
    pattern Bar_ p_a8Sw = Tag (CS (CS CZ)) (NA_I p_a8Sw :* NP0)
    pattern Lol_ p_a8Sx = Tag (CS (CS (CS CZ))) (NA_I p_a8Sx :* NP0)
    pattern Nothing_ = Tag CZ NP0
    pattern Just_ p_a8Sy = Tag (CS CZ) (NA_I p_a8Sy :* NP0)
    pattern Nothing_ = Tag CZ NP0
    pattern Just_ p_a8Sz = Tag (CS CZ) (NA_I p_a8Sz :* NP0)

@VictorCMiraldo VictorCMiraldo self-assigned this Aug 15, 2018
arianvp added a commit that referenced this issue Aug 17, 2018
Also disable pattern synonym generations temporarily
in leui of #32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants