如何阅读haskell类型签名?

Don*_*tro 0 haskell type-inference

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

jkl x f y = f (map (+y) x)
Run Code Online (Sandbox Code Playgroud)

我把它拿出去了.

jkl :: Num b => [b] -> ([b] -> t) -> b -> t
Run Code Online (Sandbox Code Playgroud)

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

chi*_*chi 9

jkl :: Num b => [b] -> ([b] -> t) -> b -> t
Run Code Online (Sandbox Code Playgroud)

无论谁打电话jkl都要

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


Fyo*_*kin 7

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

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

参数:

  1. [b]- 类型的值列表b,无论是什么。
  2. [b] -> t- 一个函数,它接受一个列表b并产生一个t.
  3. b- 类型的单个值b

最后,函数结果是t