Downsides to ScopedTypeVariables

J. *_*son 10 haskell types ghc

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

Pet*_*lák 10

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

{-# LANGUAGE RankNTypes #-}
foo :: forall a . (a -> a) -> (a -> a)
foo = bar
  where
    bar :: a -> a
    bar = id
Run Code Online (Sandbox Code Playgroud)

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


Tho*_*son 8

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

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