При написании контекстов на типе подписи, обычно я хотел бы сделать что-то вродеHaskell Несколько контекстов - каррирование?
f :: (Enum a, Ord a) => a -> a
Но через явное тупое везение я обнаружил, что это компилирует и, кажется, работает одинаково, по крайней мере, на GHC 7.8:
f :: Enum a => Ord a => a -> a
Каковы теоретические или практические различия между ними? Является ли второй менее ортодоксальным? Кажется, что Haskell report не упоминает о второй форме, и я никогда не видел, чтобы она использовалась где угодно. Related question.
SPJ представил лекцию, в которой он объяснил, с чем скомпилированы ограничения. https://www.youtube.com/watch?v=6COvD8oynmI - Короче говоря, они являются аргументами функций сами по себе. – AJFarmar