在Doets撰写的《 Haskell逻辑,数学和编程之路》 的第152页中,给出了
但是,当我在ghc中键入[]
时,会得到[]
和
$> :t []
[] :: [a]
所以Haskell确实显示了多态数据类型,所以我在这里遗漏了什么吗?还是这本书呢?
也许这是后来添加到Haskell中的东西;这本书是2004年写的。
答案 0 :(得分:4)
这是默认设置(如果只需要在单个类型上使用的话,将一类多态表达式变成单态表达式的过程)加上ghci's extended default rules的结果。您的书中可能有关于默认设置的部分,尽管ghci的额外默认设置规则将不在此处进行描述。通过扩展默认设置,多态类型Show a => [a]
在打印之前默认为单态类型[()]
。您可以通过禁用扩展默认设置来重现这本书的错误(无论如何,还是类似的错误):
> :set -XNoExtendedDefaultRules
> []
<interactive>:2:1: error:
• Ambiguous type variable ‘a0’ arising from a use of ‘print’
prevents the constraint ‘(Show a0)’ from being solved.
Probable fix: use a type annotation to specify what ‘a0’ should be.
These potential instances exist:
instance Show Ordering -- Defined in ‘GHC.Show’
instance Show Integer -- Defined in ‘GHC.Show’
instance Show a => Show (Maybe a) -- Defined in ‘GHC.Show’
...plus 22 others
...plus 11 instances involving out-of-scope types
(use -fprint-potential-instances to see them all)
• In a stmt of an interactive GHCi command: print it