Defining a wired-in type of a different kind

Simon Peyton Jones simonpj at
Wed Apr 3 14:28:53 UTC 2019

Make sure you add the new wired in this to `TysWiredIn.wiredInTyCons`

From: ghc-devs <ghc-devs-bounces at> On Behalf Of Jan van Br├╝gge
Sent: 03 April 2019 12:06
To: ghc-devs at
Subject: Defining a wired-in type of a different kind


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


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))


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


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the ghc-devs mailing list