Access to class defaults and derived instances

David Feuer david.feuer at
Sat Aug 22 16:54:47 UTC 2015

>From time to time, a library lacks an instance for something that I want.
For example, I may need to convert

data Foo = Bar (Vector Baz)

to FishFood, but (to avoid unreasonable dependencies) Vector doesn't have a
ToFishFood instance, so I can't just write

instance ToFishFood Foo

and (using Generic magic) be done with it. Instead, I must write the
instance completely by hand, which could be painful. I *could* write an
orphan instance, but orphans are evil.

What I wish I could do:

newtype Vec a = Vec (Vector a)

instance ToFishFood a => (newtype Vec) a where
  -- if needed
  toFishFood (v :: Vector a) = ...

That is, I want to write a super-secret orphan instance for Vector and
transfer it to Vec via GND precisely when it is legal to do so. The secret
instance could itself be derived (if the constructors are visible) or could
make use of default member definitions.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the ghc-devs mailing list