
On 28/10/06, Jason Dagit
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@gmail.com