Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell术语:类型签名的一部分_Haskell - Fatal编程技术网

Haskell术语:类型签名的一部分

Haskell术语:类型签名的一部分,haskell,Haskell,Haskell中的许多类型签名采用以下形式: a :: (B) => C 据我所知,术语“类型签名”指的是整个构造a::(B)=>C,而B(如果存在)称为“约束”。但是,我不知道如何明确地引用类型签名的其余部分,C 位于任何约束右侧的类型签名部分是否有标准名称? 几次天真的搜索一无所获。到目前为止,这里是我最好的尝试,但最好有一个既简洁又明确的术语: “任何约束之后的类型签名部分” “类型签名的无约束部分” 在某些情况下,从上下文中可以清楚地看到“类型签名的剩余部分” 为了让这更具体

Haskell中的许多类型签名采用以下形式:

a :: (B) => C
据我所知,术语“类型签名”指的是整个构造
a::(B)=>C
,而
B
(如果存在)称为“约束”。但是,我不知道如何明确地引用类型签名的其余部分,
C

位于任何约束右侧的类型签名部分是否有标准名称?

几次天真的搜索一无所获。到目前为止,这里是我最好的尝试,但最好有一个既简洁又明确的术语:

  • “任何约束之后的类型签名部分”
  • “类型签名的无约束部分”
  • 在某些情况下,从上下文中可以清楚地看到“类型签名的剩余部分”
为了让这更具体,这里有一个前奏曲中的例子:

mapM :: Monad m => (a -> m b) -> [a] -> m [b]
相对于上面使用的符号,标识符
mapM
对应于
a
,约束
Monad m
对应于
B
,并且
(a->mb)->[a]->m[B]
对应于
C
。我在寻找一个单词/短语,它明确地引用了
=>
之后的类型签名部分,即
(a->mb)->[a]->[b]

当我想到“类约束”时,我想到了出现在类定义左侧的“超类约束”:

class (Functor a) => Applicative a
我把函数上的约束称为“约束”。在这两种情况下,约束实际上不需要来自类。例如,我们可以有等式约束:

f :: (a ~ Int) => a -> a -> a

你提到的“C”部分(在上面的例子中,
a->a->a
)被称为“头部”(如中所示)。

实际上,这并没有回答问题。我认为它回答了问题。他问“C”部分是什么。您想提出改进建议吗?您示例中的
C
是较大类型
(a~Int)=>a->a->a
中的部分
a->a
,而不是部分
(a~Int)
。OP将
C
用于类型中
=>
的右侧,而字母
C
通常用于左侧。“Head”已经非常超载了。。。为了消除歧义,你会说“类型签名的头部”这样的话吗?此外,你能提供任何链接,显示“头”正在以你建议的方式使用吗?搜索“Haskell类型头签名”似乎不会产生很多相关结果。@Eric感谢更新。看起来这个术语是特定于受约束实例声明的RHS的,在RHS中,语义有很大不同。(据我所知,受约束实例声明的RHS是一个类型类,后跟一个或多个类型,而受约束类型签名的RHS只是一个裸类型/无约束类型。)正因为如此,而且我还没有发现任何“head”用于类型签名的示例与用于实例声明的方式相同,我会小心使用这个术语。但是知道它存在是件好事。
Show a=>a->a
被称为类型。事情也是如此。传统上,“类型”一词指的是类型的事物。例如,
可能
不是一个类型,而是一个类型构造函数(它的种类是
*->*
)。例如,
也不显示一个
(其种类是
约束
,即类约束的种类)。然而,根据具体情况,使用“类型”来指代任何种类的事物是完全有效的(即种类的类型
*
,种类的类型
约束的类型
,等等)。如果您需要明确说明,
Show a
是一个“约束”或“上下文”;
a->a
是一个“类型”。而
对于所有类型。显示a=>a->a
是一个多类型(空间不足)。这种语言不是通用的,但出现在许多地方,例如类型系统的形式规范。可能没有广泛使用的术语。例如,Haskell报告说,“一般来说,我们使用cx表示上下文,我们写cx=>t表示受上下文cx限制的类型t。”使用非常通用的术语“类型”。这是一种特殊的GHC命名法,但在a的类型
中。(Show b,Read c)=>d
,完整的东西被称为sigma类型,
(Show b,Read c)=>d
是rho类型,
(Show b,Read c)
是θ类型,
d
是tau类型。