-
FlexibleContexts -
Снимает ограничение на переменные типа в контекстах классов.
Расширение FlexibleContexts снимает ограничение Haskell 98, согласно которому ограничения классов типов (где бы они ни встречались) должны иметь форму (class type-variable) или (class (type-variable type1 type2 … typen)). С расширением FlexibleContexts следующие сигнатуры типов вполне допустимы:
g :: Eq [a] => ... g :: Ord (T a ()) => ...
Это расширение не влияет на ограничения равенства в контексте экземпляра; они разрешены расширениями TypeFamilies или GADTs.
Обратите внимание, что FlexibleContexts влияет на использование ограничений классов в сигнатурах типов и других контекстах. В отличие от него, FlexibleInstances ослабляет аналогичное ограничение при объявлении нового экземпляра.