Hello,

I was trying to add a new compulsory-unfoldable primitive (i.e., one like `unsafeCoerce` in `basicTypes/MkId.hs`), but I got stuck while trying to construct its type.  The primitive needs to have this type:

    natSingI :: Sing a -> (SingI a => b) -> b

`Sing` is a kind polymorphic data family.
`SingI` is a kind polymorphic class.

I am using these at kind `Nat` so, I believe, the fully-explicit type that I need to construct is actually this:

    natSingI :: forall (a :: Nat) (b :: *). Sing Nat a -> (SingI Nat a -> b) -> b

I can almost create this type, but I got stuck on making the `SingI` type constructor.  While there are many examples of making `Name`s for classes, I couldn't find one where we make a `TyCon` for a class.  In particular, it looks like to make a class `TyCon`, I need to provide a `Class` value, which contains a whole lot of information that would normally be constructed by the compiler itself (class `SingI` is an ordinary class defined in source code).

So I was wondering if there might be a way to obtain this information in some way or if, indeed, I need to define explicitly the entire class as a wired-in thing.

Any advice would be most appreciated!
-Iavor