ScopedTypeVariables
有什么缺点,如果有的话?为什么不默认开启?它会导致更糟糕的推断吗?是否存在失败的边缘情况?在GHC中实施起来要困难得多吗?
答案 0 :(得分:10)
这也是因为它改变了程序的语义(与其他扩展相结合)。考虑
{-# LANGUAGE RankNTypes #-}
foo :: forall a . (a -> a) -> (a -> a)
foo = bar
where
bar :: a -> a
bar = id
它编译得很好,但是ScopedTypeVariables
它甚至无法编译。
答案 1 :(得分:8)
默认情况下它没有打开,因为默认情况下每个其他扩展都没有打开 - 它不是Haskell标准的一部分。
正如奥古斯特所说 - 这需要在类型检查器中使用更多逻辑,但我认为没有人认为它很麻烦。