为什么GHCi不让我用种类注释我的类型?

时间:2018-07-16 15:06:29

标签: haskell ghc

我在阅读《 Haskell的历史》一书时发现了有关Kinds的内容,并尝试在the Haskell Wiki上运行一些示例。

这样做的时候,我得到了错误

Prelude> Int :: *                                                                                                 [3/1792]

<interactive>:1:8: error:                                                                                                 
    Not in scope: type constructor or class ‘*’                                                                           

<interactive>:1:8: error:
    Illegal operator ‘*’ in type ‘*’
      Use TypeOperators to allow operators in types

我不认为“导入” TypeOperators会有所帮助,因为我认为GHCi认为*是乘法运算符,当我希望它表示种类时。

This wiki page似乎表明种类可能尚未添加到我的GHC版本中。是这样吗?

我正在使用GHCi版本8.0.2(来自Ubuntu 18.04程序包管理器)。

1 个答案:

答案 0 :(得分:2)

要检查GHCi中的种类,您可能需要使用以下内容

> :set -XKindSignatures
> :k (Int :: *)
(Int :: *) :: *

或省略:: *部分,让:k为您找出答案。

直接键入Int :: *将使GHCi将Int解释为值表达式,并寻找不存在的值构造函数Int。它还会将*解释为一种类型,而不是一种类型,这会导致错误。