Wired-in type class
Joachim Breitner
mail at joachim-breitner.de
Sun Aug 18 21:28:51 CEST 2013
Hi,
Am Sonntag, den 18.08.2013, 15:24 +0000 schrieb Simon Peyton-Jones:
> * Make NT a wired-in Class. We don't have any of these at the moment, but there should be no difficulty in creating one, along the lines of the wired-in TyCons in TysWiredIn. Its data con should have the type
> NT :: (a ~R# b) -> NT a b
>
> * Also make ntCast a wired-in It (see example in MkId), with an unfolding like
> ntCast :: NT a b => a -> b
> ntCast = /\ab. \d:NT a b. \x:a.
> case d of
> NT (g : a ~R# b) -> x |> g
thanks; the Core of ntCast looks very much like what I have at the
moment (although I still use an intermediate datatype; but that can
easily be changed later).
> * In the base module, define NT as a data type, and ntCast as a function:
>
> data NT a b where
> NT :: NT a a
>
> ntCast :: NT a b -> a -> b
> ntCast NT x = x
>
> These definitions will never get imported, because the definitions are wired-in.
> And indeed they are slightly wrong: we are declaring NT as a data type not
> a class, and the type of NT will be
> NT :: (a ~T# b) -> NT a b
>
> But they may still be used if, for example, we say (map ntCast xs).
> All that matters is that their execution behaviour is correct, which it will be.
Is there any reason to prefer such “slightly wrong” definitions which
are overwritten with built-in stuff over simply putting the type
constructors and functions into GHC.Prim?
> * We are only going to allow GHC-derived instances of NT.
Just to be sure: Preventing manual instances is currently not possible
and such a feature would have to be added to GHC, right?
> The instance for NT a a
> may be super-special: as Iavor mentions we can check for that specially in matchInst.
> All the others are generated by a 'deriving' clause.
For some reason I’m still trying hard to make NT as un-special as
possible, including a regular "NT a a" instance. Let’s see how far I get
with that.
I hope to have some code that I can show soon.
> Happy to discuss. There is probably too much to do, and get settled, for it to be in 7.8 anyway.
I have absolutely no rush for 7.8, so that is not an issue from my side.
Greetings,
Joachim
--
Joachim “nomeata” Breitner
mail at joachim-breitner.de • http://www.joachim-breitner.de/
Jabber: nomeata at joachim-breitner.de • GPG-Key: 0x4743206C
Debian Developer: nomeata at debian.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part
URL: <http://www.haskell.org/pipermail/ghc-devs/attachments/20130818/9011163b/attachment.pgp>
More information about the ghc-devs
mailing list