在 GHCi 中,为啥函数箭头 `:kind (->)` 的种类包含问号 `(->) :: ?? ->? -> *`? [复制]

Posted

技术标签:

【中文标题】在 GHCi 中,为啥函数箭头 `:kind (->)` 的种类包含问号 `(->) :: ?? ->? -> *`? [复制]【英文标题】:In GHCi, why does the kind of the function arrow `:kind (->)` include question marks `(->) :: ?? -> ? -> *`? [duplicate]在 GHCi 中,为什么函数箭头 `:kind (->)` 的种类包含问号 `(->) :: ?? ->? -> *`? [复制] 【发布时间】:2011-07-18 14:21:54 【问题描述】:

可能重复:Haskell Weird Kinds: Kind of (->) is ?? -> ? -> *

在GHCi(7.0.2版)中,如果我问函数类型的种类,结果有问号:

Prelude> :kind (->)
(->) :: ?? -> ? -> *

为什么这种类型包括问号而不是星号* -> * -> *?问号是什么意思?为什么其他类型只使用星号?

Prelude> :kind (,)
(,) :: * -> * -> *

【问题讨论】:

IMO,如果 GHC 仅在为 GHCi 提供特殊编译指示时才显示这些扩展上下文,我会更喜欢它,因为它们会使初学者感到困惑。 另见唐斯图尔特更详细的解释here。 【参考方案1】:

??? 类型是指 GHC 扩展,特别是未装箱的类型。 http://hackage.haskell.org/trac/ghc/wiki/IntermediateTypes 有一个图表显示了扩展类型 ?(所有可能的类型)、#(未装箱类型)、??(装箱或普通未装箱类型)之间的关系——“# 和 @987654328 的最小上限@")、(#)(未装箱的元组,只能在少数上下文中使用)。 (标准类型*指的是普通的盒装类型。)

【讨论】:

以上是关于在 GHCi 中,为啥函数箭头 `:kind (->)` 的种类包含问号 `(->) :: ?? ->? -> *`? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

函数应用:这里为啥用$?

为啥我不能在箭头函数中访问“this”? [复制]

Yesod:在 ghci 中运行“runDB”函数时键入实例错误

为啥我不能在 JavaScript/ES6 中使用带有箭头函数的`new`? [复制]

使用 GHCi 时如何为函数提供显式类型声明?

为啥我的 javascript 箭头函数在 Edge/IE 中不起作用?