Каковы минусы для ScopedTypeVariables
, если они есть? Почему он не включен по умолчанию? Это приводит к худшему выводу? Есть ли случаи, когда он терпит неудачу? Это значительно сложнее реализовать в GHC?
Недостатки ScopedTypeVariables
Ответ 1
Он по умолчанию не включен по той же причине, что и любое другое расширение не включено по умолчанию - оно не является частью стандарта Haskell.
Как сказал августсс - это требует большей логики в контролере типов, но я не думаю, что кто-то считает это обременительным.
Ответ 2
Это также потому, что он изменяет семантику программы (в сочетании с другими расширениями). Рассмотрим
{-# LANGUAGE RankNTypes #-}
foo :: forall a . (a -> a) -> (a -> a)
foo = bar
where
bar :: a -> a
bar = id
Он компилируется отлично, но с ScopedTypeVariables
он даже не компилируется.