Hello
Consider the following data, class and instance:
class PP m where
create :: a -> m a
data A a = A a
instance PP A where
create a = A a
And then:
class CB a where
fb :: a -> Int
data B m a = B (m a)
If I try to define an instance of PP for B with the following implementation:
instance (PP m) => PP (B m) where
create a = let _ = fb a
in B (create a)
GHC issues the (expected) error: Could not deduce (CB a) arising from a use of 'fb' from the context (PP m).
So the workaround I am using is to define a new class PP' where the type a is made more explicit. That allows the constraint (CB a) to be stated in an instance declaration.
class PP' m a where
create' :: a -> m a
instance (PP m) => PP' m a where
create' = create
instance (PP m, CB a) => PP' (B m) a where
create' a = let _ = fb a
in B (create a)
So, my question is: is there a way to achieve the same results without having to create the new class PP'?
Thank you for your help
J-C