为什么"(2 + 2.0)"在.hs文件中加倍但GHCi中的"分数a => a"?

sta*_*ser 3 haskell

a = 2+2.0.hsGHCi中的文件加载并进行:t a演出a :: Double.

另一方面,做let b = 2+2.0:t bGHCi表明b :: Fractional a => a.

你怎么能从这两个文件中推断出这个?

我发现这个官方文档几乎不可理解.

Jon*_*ast 6

我想这个文档就是你想要的.基本上,GHC默认情况下GHC实现的语言不同于模块; 特别是,在模块中默认启用可怕的单态限制(根据语言),而在GHCi中它被禁用.单态限制是导致GHC为您选择单态类型的原因a,而在关闭它的情况下,GHC可以自由地推广类型b,从而产生您看到的多态类型.