
Hi. I came a cross the following phenomena which, at least to me, occurs kind of awkward. The code below : data MyData a where DC1 :: (Show a ) => a -> MyData a instance Show (MyData a) where show (DC1 a ) = show a yields the ghci error : 'Could not deduce (Show a) from the context (Show (MyData a))' Adding a Show restriction for the instantiation as in instance Show a => Show (MyData a ) where show (DC1 a ) = show a makes the type checker happy. However, this means that all parametrised values over MyData must have a Show type which isn't necessarily what one wants. I would also like to point out that adding a 'wrapper type' as in data Wrap a = Wrap a data MyData a where DC1 :: (Show a ) => a -> MyData (Wrap a) instance Show (MyData a ) where show (DC1 a ) = show a works fine. Even though 'Wrap' does not derive Show. So, if anyone can give me some hints about the reason for this, I will appreciate it :) Thanks /Joel