在 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 (->)` 的种类包含问号 `(->) :: ?? ->? -> *`? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Yesod:在 ghci 中运行“runDB”函数时键入实例错误