Local evidence and type class instances
bertram.felgenhauer at googlemail.com
Tue Nov 2 10:15:47 EDT 2010
> Now that the Glorious New type checker can handle local evidence
> seamlessly, is it a big implementation burden to extend it to deal
> with local *type class instances* in addition to local *equality
> For example, you could write this:
> f :: Bool
> f = id < id
> instance Ord (a -> b) where
> _ `compare` _ = LT
I dislike the fact that you can produce incoherent instances with that
extension. How about a restricted version that only works on fresh types?
f :: Bool -> Bool
f b = N id < N id where
-- N is a fresh type, unique to a particular application of f.
newtype N = N (a -> b)
instance Ord N where
_ `compare` _ = LT
This is sufficient for implicit configurations, and avoids the overlap of
the new instances with existing instances. I don't know how much extra
burden local type definitions like these would add.
More information about the Glasgow-haskell-users