Are there any problems associated with replacing classes like Show1, NFData1, etc. with an equivalent QuantifiedConstraint-style implementation? e.g. Show1 f
becomes forall a . Show a => Show (f a)
, or if you like:
type Lift c f = (forall s . c s => c (f s) :: Constraint)
And then you have Show1 f
becomes Lift Show f
, and you don’t have to deal with all these special lifted versions of random typeclasses.
I’ve been using the QuantifiedConstraints-style constraints in my code recently and have found it comparatively much more pleasant to use. Are there any problems with this approach that I haven’t run into yet?