При написании контекстов на сигнатуре типа обычно я делаю что-то вроде
f :: (Enum a, Ord a) => a -> a
Но благодаря чистой глупости я обнаружил, что это компилируется и, похоже, работает одинаково, по крайней мере, в GHC 7.8:
f :: Enum a => Ord a => a -> a
Каковы теоретические или практические различия между ними? Является ли второй менее ортодоксальным? отчет Haskell, похоже, не упоминает о второй форме, и я никогда не видел, чтобы она использовалась где угодно. Связанный с нами вопрос.