Open jkarni opened 8 years ago
This is what I came up with:
instance A.ToJSON (Book' '[])
instance (A.ToJSON (Book' m), A.ToJSON v) => A.ToJSON (Book' (k :=> v ': m))
instance A.FromJSON (Book' '[])
instance (A.FromJSON (Book' m), A.FromJSON v) => A.FromJSON (Book' (k :=> v ': m))
instance Generic (Book' '[]) where
type Rep (Book' '[]) = U1
from _ = U1
to _ = Book (Map.Empty)
instance {- (Generic (Book' m)) => -} Generic (Book' (k :=> v ': m)) where
-- type Rep (Book' (k :=> v ': m)) = S1 ('MetaSel ('Just k) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 v) :*: Rep (Book' m)
-- from (Book (Map.Ext k v m)) = M1 (K1 v) :*: from (Book m)
-- to (M1 (K1 v) :*: m) = Book (Map.Ext (Map.Var :: Map.Var k) v (getBook (to m)))
type Rep (Book' (k :=> v ': m)) = S1 ('MetaSel ('Just k) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 v) :*: S1 ('MetaSel ('Just k) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Book' m))
from (Book (Map.Ext k v m)) = M1 (K1 v) :*: (M1 (K1 (Book m)))
to (M1 (K1 v) :*: (M1 (K1 (Book m)))) = Book (Map.Ext (Map.Var :: Map.Var k) v m)
But this is not ideal. The commented Generic (Book' m))
overlaps with aeson
instances. Not sure what the best solution would be.
The commented Generic (Book' m)) overlaps with aeson instances
What do you mean by that? I don't quite see it.
As a separate library.