I would suggest that it's easier to define a normal type constructor and data cons and then promote them.
This is how the runtime rep polymorphism stuff works for instance so you can look there for inspiration (it's where I look to work out how to implement multiplicity polymorphism). Matt On Wed, Apr 3, 2019 at 12:06 PM Jan van Brügge <[email protected]> wrote: > > Hi, > > when trying to get familiar with the GHC code base for my Bachelor's > thesis. I followed the GHC Wiki, especially the case study about the > bool type. > Now I wanted to add a new kind and a new type inhabiting this kind > (without having to expose a data constructor, so without datatype > promotion). > > So in TysWiredIn.hs I added the new TyCons and added them to the list of > wired-in types: > > -- data Row a b > rowKindCon :: TyCon > rowKindCon = pcTyCon rowKindConName Nothing [alphaTyVar, betaTyVar] [] > > rowKind :: Kind > rowKind = mkTyConTy rowKindCon > > -- data RNil :: Row a b > rnilTyCon :: TyCon > rnilTyCon = mkAlgTyCon rnilTyConName [] rowKind [] Nothing [] > (mkDataTyConRhs []) > (VanillaAlgTyCon (mkPrelTyConRepName rnilTyConName)) > False > > rnilTy :: Type > rnilTy = mkTyConTy rnilTyCon > > > I also added two new empty data decls to ghc-prim, but if I inspect the > kind of RNil it is not Row, but Type. So I think I am either > understanding res_kind wrong or I have to do something completely different. > I am also not sure how to verify that the code in TysWiredIn.hs is > working at all, from all what I can tell it could just be the > declarations in ghc-prim that result in what I see in ghci. > > Thank you and sorry for my beginner question > Jan > > _______________________________________________ > ghc-devs mailing list > [email protected] > http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs _______________________________________________ ghc-devs mailing list [email protected] http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
