单态限制,ghci和let表达

Eva*_*ian 3 haskell

这个表达式不正确.

f = show
Run Code Online (Sandbox Code Playgroud)

但是,在ghci这是合法的

let f = show
Run Code Online (Sandbox Code Playgroud)

而且,它的类型改为

() -> String
Run Code Online (Sandbox Code Playgroud)

这种现象有什么解释吗?

GS *_*ica 6

ghci中提示的行为如同ExtendedDefaultRules扩展功能.

特别是这意味着:

单元类型()被添加到标准类型列表的开头,这些类型在执行类型默认时尝试.

因此,要从源文件中获取相同的行为,请使用或编译-XExtendedDefaultRules,或者添加{-# LANGUAGE ExtendedDefaultRules #-}到文件的顶部.