On 28/10/06, Jason Dagit <[EMAIL PROTECTED]> 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, [EMAIL PROTECTED]
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to