如何阅读haskell类型签名?

时间:2017-12-13 22:48:57

标签: haskell type-inference

所以我把这句话放在我的ghci

jkl x f y = f (map (+y) x)

我把它拿回来了。

jkl :: Num b => [b] -> ([b] -> t) -> b -> t

但是当我读到它时我很困惑。根据我的理解,jkl是带有[b],[b]和t以及b的类型num。最后它将输出t。是正确的阅读方式吗?

2 个答案:

答案 0 :(得分:9)

jkl :: Num b => [b] -> ([b] -> t) -> b -> t

致电jkl的人必须

  • 选择类型bt
  • 保证在数字类型(b约束)
  • 中选择Num b
  • 传递[b]b列表)作为第一个参数
  • 传递函数[b] -> t作为第二个参数(即取[b]并返回t
  • 传递b作为第三个参数
  • 收到t作为最终结果

答案 1 :(得分:4)

双冒号::和胖箭=>之间的任何内容都称为约束。在这种情况下,您有一个约束:Num b。这个约束要求,无论b类型是什么,它都必须是类Num类型的实例。

在胖箭头之后,您将获得函数参数的类型,以及其结果的最终类型。

参数:

  1. [b] - 类型b的值列表,无论是什么。
  2. [b] -> t - 一个获取b列表并生成一个t的函数。
  3. b - 类型为b的单个值。
  4. 最后,函数结果为t