首页 > 解决方案 > 为什么 GHCi 不让我用种类注释我的类型?

问题描述

我在阅读 Haskell 历史论文时发现了 Kinds,并尝试在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 认为 * 是乘法运算符,当我希望它表示一种类型时。

这个 wiki 页面似乎表明 Kinds 可能尚未添加到我的 GHC 版本中。会是这样吗?

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

标签: haskellghc

解决方案


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

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

或者省略:: *部分,让:k你自己弄清楚。

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


推荐阅读