{-# LANGUAGE FlexibleInstances, FlexibleContexts #-}
In Haskell I can do something like
class C a where
c :: a -> a
instance C (f Integer) where
c = id
As seen, the instance of C is polymorphic, but only on the type constructor and not on the type parameter. What is the point of this feature? I have never seen this used, but since it is allowed I assume there is some case where it is useful. Is it?