Haskell可以显示多态类型的对象吗?

时间:2018-08-16 12:49:22

标签: haskell types polymorphism

在Doets撰写的《 Haskell逻辑,数学和编程之路》 的第152页中,给出了

enter image description here

但是,当我在ghc中键入[]时,会得到[]

$> :t []
[] :: [a]

所以Haskell确实显示了多态数据类型,所以我在这里遗漏了什么吗?还是这本书呢?

也许这是后来添加到Haskell中的东西;这本书是2004年写的。

1 个答案:

答案 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