缺少ScopedTypeVariables

时间:2013-09-17 14:16:00

标签: haskell types ghc

ScopedTypeVariables有什么缺点,如果有的话?为什么不默认开启?它会导致更糟糕的推断吗?是否存在失败的边缘情况?在GHC中实施起来要困难得多吗?

2 个答案:

答案 0 :(得分:10)

这也是因为它改变了程序的语义(与其他扩展相结合)。考虑

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

它编译得很好,但是ScopedTypeVariables它甚至无法编译。

答案 1 :(得分:8)

默认情况下它没有打开,因为默认情况下每个其他扩展都没有打开 - 它不是Haskell标准的一部分。

正如奥古斯特所说 - 这需要在类型检查器中使用更多逻辑,但我认为没有人认为它很麻烦。