Haskell中的许多类型签名具有以下形式:
a :: (B) => C
据我所知,术语"类型签名"指的是整个构造a :: (B) => C
,B
(如果存在)被称为"约束"。但是,我不确定如何明确地引用类型签名的其余部分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]
。
答案 0 :(得分:1)
当我想到"类限制"时,我会想到"超类约束"出现在类定义的左侧:
class (Functor a) => Applicative a
我在函数上调用约束只是"约束"。在这两种情况下,实际上不需要从类中产生约束。例如,我们可以有等式约束:
f :: (a ~ Int) => a -> a -> a
" C"你引用的部分(在上面的例子中,a -> a -> a
)被称为" head" (如"instance head")。