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