如何解释这个 Ramda 签名?

How to interpret this Ramda signature?

谁能解释一下如何理解这个符号:

((a, b) → a) → a → [b] → a

参见:https://ramdajs.com/docs/#reduce

我相信它的 Hindley-Milner 符号:https://drboolean.gitbooks.io/mostly-adequate-guide-old/content/ch7.html

((a, b) → a) → a → [b] → a
^^^^^^^^^^^^   ^   ^^^   ^
1              2   3     4

这是一个接受三个参数 (1) (2) (3) 和 returns 类型 a (4) 的值的函数:

  1. 第一个参数是一个函数,它有两个参数(可能是同一类型)和returns一个与第一个参数类型相同的值。
  2. 第二个参数是a
  3. 类型的值
  4. 第三个参数是 b
  5. 类型值的列表
reduce( (acc, x) => acc + x.length,    0,   ["foo", "bar", "baz"]); //=> 9
//       ^^^  ^     ^^^^^^^^^^^^^^     ^    ^^^^^^^^^^^^^^^^^^^^^        ^
//       a    b     a                  a    [b]                          a
//     ((a -> b) -> a             ) -> a -> [b]                       -> a

在这种情况下,a代表number类型,b代表string类型。