Hi, Am Freitag, den 06.09.2013, 15:03 +0000 schrieb Simon Peyton-Jones: > Sounds amazing Joachim -- great work.
Thanks! > | Consider > | data Foo a = MkFoo (a,a). > | The (virtual) instance > | instance Coercible a b => Coercible (Foo a) (Foo b) > | can only be used when MkFoo is in scope, as otherwise the user could > | break abstraction barriers. This is enforced. > > Whoa! Where did this instance come from? I thought that we generated > precisely two (virtual) instances for Foo: > > instance Coercible a (b,b) => Coercible a (Foo b) > instance Coercible (a,b) b => Coercible (Foo a) b > > and no others. That it. Done. That was precisely the payload of my message > of 2 August, attached. Well, that is the case when we want to unwrap a newtype. But this is not the case here: We have a data type and we want to cast one of its type arguments. Clearly, we want to have instance Coercible a b => Coercible [a] [b] right? The instance above is just an other instance (heh) of that form. The two virtual instances that you mention only make sense for newtype, _in addition_ to the usual “cast something inside this type”. > [..] > > In short, I think that if you use the approach I outlined, all these problems > go away. Am I wrong? I believe so; I hope I just clarified it. Greetings, Joachim -- Joachim “nomeata” Breitner m...@joachim-breitner.de • http://www.joachim-breitner.de/ Jabber: nome...@joachim-breitner.de • GPG-Key: 0x4743206C Debian Developer: nome...@debian.org
signature.asc
Description: This is a digitally signed message part
_______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://www.haskell.org/mailman/listinfo/ghc-devs