Defining a wired-in type of a different kind

Jan van Brügge jan at vanbruegge.de
Wed Apr 3 11:33:02 UTC 2019


Yeah, sorry, it is here:
https://gitlab.haskell.org/jvanbruegge/ghc/commit/73b383275f3d497338ca50a3a7934445c3858450

Am 03.04.19 um 13:11 schrieb Ben Gamari:
> 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