有什么缺点ScopedTypeVariables
,如果有的话?为什么默认不开启?它会导致更糟糕的推理吗?是否存在失败的边缘情况?在 GHC 中实施是否困难得多?
问问题
355 次
2 回答
10
这也是因为它改变了程序的语义(结合其他扩展)。考虑
{-# LANGUAGE RankNTypes #-}
foo :: forall a . (a -> a) -> (a -> a)
foo = bar
where
bar :: a -> a
bar = id
它编译得很好,但ScopedTypeVariables
它甚至无法编译。
于 2013-09-17T18:20:18.947 回答
8
默认情况下它不启用,原因与默认情况下所有其他扩展均不启用相同 - 它不是 Haskell 标准的一部分。
正如augustss所说 - 这需要类型检查器中的更多逻辑,但我认为没有人认为它是繁重的。
于 2013-09-17T15:39:23.917 回答