Недостатки ScopedTypeVariables

Каковы минусы для ScopedTypeVariables, если они есть? Почему он не включен по умолчанию? Это приводит к худшему выводу? Есть ли случаи, когда он терпит неудачу? Это значительно сложнее реализовать в GHC?

Ответ 1

Он по умолчанию не включен по той же причине, что и любое другое расширение не включено по умолчанию - оно не является частью стандарта Haskell.

Как сказал августсс - это требует большей логики в контролере типов, но я не думаю, что кто-то считает это обременительным.

Ответ 2

Это также потому, что он изменяет семантику программы (в сочетании с другими расширениями). Рассмотрим

{-# LANGUAGE RankNTypes #-}
foo :: forall a . (a -> a) -> (a -> a)
foo = bar
  where
    bar :: a -> a
    bar = id

Он компилируется отлично, но с ScopedTypeVariables он даже не компилируется.