Consider Haskell's Generic class :
class Generic a where
-- | Generic representation type
type Rep a :: * -> *
-- | Convert from the datatype to its representation
from :: a -> (Rep a) x
-- | Convert from the representation to the datatype
to :: (Rep a) x -> a
I'm curious as to why it wasn't written as below:
class Generic a where
-- | Generic representation type
type Rep a :: *
-- | Convert from the datatype to its representation
from :: a -> Rep a
-- | Convert from the representation to the datatype
to :: Rep a -> a
More specifically what does the type variable x stand for in the standard definition?