#5499: Tagging constructors with record/product phantom type
----------------------------------+-----------------------------------------
    Reporter:  basvandijk         |        Owner:              
        Type:  feature request    |       Status:  new         
    Priority:  normal             |    Milestone:              
   Component:  libraries (other)  |      Version:  7.2.1       
    Keywords:                     |     Testcase:              
   Blockedby:                     |   Difficulty:              
          Os:  Unknown/Multiple   |     Blocking:              
Architecture:  Unknown/Multiple   |      Failure:  None/Unknown
----------------------------------+-----------------------------------------

Comment(by basvandijk):

 I'm having a bit of trouble using `IsRecord` for changing the dynamic
 choice using `conIsRecord` into a static choice. This is the
 
[https://github.com/basvandijk/aeson/blob/5bdf30ed4b32f2cc169f6e4e58d1688bcb02c197/Data/Aeson/Types/Internal.hs#L925
 current code] that uses a dynamic choice:

 {{{
 instance (Constructor c, GRecordToObject a, GToJSON a) => GToJSON (C1 c a)
 where
     gToJSON m1@(M1 x)
         | conIsRecord m1 = Object $ gRecordToObject x
         | otherwise = gToJSON x
 }}}

 Naively rewriting this to a static choice using `IsRecord`:

 {{{
 instance (IsRecord a True, GRecordToObject a) => GToJSON (C1 c a) where
     gToJSON = Object . gRecordToObject . unM1

 instance (IsRecord a False, GToJSON a) => GToJSON (C1 c a) where
     gToJSON = gToJSON . unM1
 }}}

 Doesn't obviously work because we get a `duplicate instance declarations`
 error.

 So somehow the information, whether a constructor is a record or not, has
 to move to the right of the `=>`.

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/5499#comment:5>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler

_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to