[Haskell-cafe] Rank N type tutorial?

David House dmhouse at gmail.com
Fri Oct 27 19:47:41 EDT 2006


On 28/10/06, Jason Dagit <dagit at codersbase.com> wrote:
> So you specified that the types which T' wraps up should be instances
> of Show, so to me it makes sense that you should be able to derive
> Show in a way similar to how newtype deriving works.  But perhaps
> there is a subtlety that I'm missing?

Not in this case, but this happens to be a specific case. For example,
imagine what would happen if we had chosen Eq instead of Show for the
class constraint. The compiler does as follows:

instance Eq T' where
  MkT' x == MkT y' = ...

Recall the type signiture for (==):

(==) :: Eq a => a -> a -> Bool

I.e. the types of its two arguments are required to unify. Even though
we know x :: exists a. Eq a => a and y :: exists b. Eq b => b, we
don't necessarily know that a is the same type as b, which means 'x ==
y' doesn't typecheck. Therefore, there's no obvious instance of Eq for
T'.

-- 
-David House, dmhouse at gmail.com


More information about the Haskell-Cafe mailing list