繁体   English   中英

GHCI请求类型或值名称空间?

[英]GHCI asking for type or value namespaces?

当向GHCI请求typeinfo ,哪个名称空间用于名称和表达式?

 :type <expr>                show the type of <expr>
 :info[!] [<name> ...]       display information about the given names
                             (!: do not filter instances)

我不确定我要什么,以下签名是什么意思。

Prelude Control.Monad.State> :t StateT
StateT :: (s -> m (a, s)) -> StateT s m a

在响应行中,第一个StateT来自值名称空间,第二个来自类型名称空间?

  • :t [ ype ]始终使用值名称空间
  • :k [ ind ]始终使用类型名称空间
  • :i [ nfo ]两者都使用,显示所有匹配的标识符。 例如,

     Prelude> data Q = A Prelude> data A = Q Prelude> :i Q data A = Q -- Defined at <interactive>:5:10 data Q = A -- Defined at <interactive>:4:1 

由于仅要求表达式的类型有意义,因此您可以确信:t StateT使用表达式名称空间。 同样,在类型说明/声明foo :: bar ,左侧foo始终是表达式,而右侧bar始终是类型。 正如您所说,

StateT :: (s -> m (a, s)) -> StateT s m a

第一个StateT来自表达式名称空间,第二个StateT来自类型名称空间。 如果要询问类型级别表达式的“类型”,可以使用:kind命令(或简称为:k ),在这种情况下,参数始终是类型级别表达式。 从而:

Control.Monad.State> :k StateT
StateT :: * -> (* -> *) -> * -> *

这里::表示种类 ,因此在foo :: barfoo是类型级别的表达式,而bar是种类级别的表达式。

通常,可以完全语法上分辨出给定名称来自哪个名称空间,但:info命令有点特殊。 当您要求提供有关出现在两个名称空间中的名称的信息时,它将为您提供有关这两个名称空间的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM