Haskell术语:遵循约束的类型签名的一部分

时间:2016-02-19 17:04:42

标签: haskell

Haskell中的许多类型签名具有以下形式:

a :: (B) => C

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

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

一些天真的搜索没有任何结果。到目前为止,这是我最好的尝试,但是有一个既简洁又明确的术语会很好:

  • "任何约束后的类型签名部分"
  • "类型签名"
  • 的无约束部分
  • 在某些情况下,从上下文中可以清楚地说出"类型签名的其余部分"

为了使这更加具体,以下是Prelude:

的一个例子
mapM :: Monad m => (a -> m b) -> [a] -> m [b]

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

1 个答案:

答案 0 :(得分:1)

当我想到"类限制"时,我会想到"超类约束"出现在类定义的左侧:

class (Functor a) => Applicative a

我在函数上调用约束只是"约束"。在这两种情况下,实际上不需要从类中产生约束。例如,我们可以有等式约束:

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

" C"你引用的部分(在上面的例子中,a -> a -> a)被称为" head" (如"instance head")。