如何解读这个 Ramda 签名?

Mac*_*las 1 functional-programming hindley-milner ramda.js

有人可以解释一下如何理解这个符号:

\n
((a, b) \xe2\x86\x92 a) \xe2\x86\x92 a \xe2\x86\x92 [b] \xe2\x86\x92 a\n
Run Code Online (Sandbox Code Playgroud)\n

请参阅: https: //ramdajs.com/docs/#reduce

\n

cus*_*der 6

((a, b) \xe2\x86\x92 a) \xe2\x86\x92 a \xe2\x86\x92 [b] \xe2\x86\x92 a\n^^^^^^^^^^^^   ^   ^^^   ^\n1              2   3     4\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
    \n
  1. 第一个参数是一个函数,它接受两个参数(可能是相同类型)并返回与第一个参数相同类型的值。
  2. \n
  3. 第二个参数是类型的值a
  4. \n
  5. 第三个参数是类型值的列表b
  6. \n
\n
reduce( (acc, x) => acc + x.length,    0,   ["foo", "bar", "baz"]); //=> 9\n//       ^^^  ^     ^^^^^^^^^^^^^^     ^    ^^^^^^^^^^^^^^^^^^^^^        ^\n//       a    b     a                  a    [b]                          a\n//     ((a -> b) -> a             ) -> a -> [b]                       -> a\n
Run Code Online (Sandbox Code Playgroud)\n

在这种情况下a代表类型numberb代表类型string

\n