Defining a wired-in type of a different kind

Ben Gamari ben at smart-cactus.org
Wed Apr 3 11:11:49 UTC 2019


On April 3, 2019 7:06:11 AM EDT, "Jan van Brügge" <jan at vanbruegge.de> 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

Can you post a full branch? Nothing in particular looks wrong with what you posted here but the PrelNames code is also relevant.

Cheers,

- Ben 


More information about the ghc-devs mailing list