Hi Jan,

mkAlgTyCon is good for making an algebraic datatype -- like Maybe or Bool or 
Either. It's not what you want for RNil, which is really a data constructor. 
Instead, rowKindCon should be the algebraic datatype, and RNil should be one of 
its constructors. Then you get the RNil TyCon via promotion, as Matt suggested.

I hope this helps!
Richard

> On Apr 3, 2019, at 7:06 AM, 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

Reply via email to