ramda文档图缺少逗号

时间:2017-06-20 00:14:19

标签: ramda.js

对于地图方法,为什么它不像第二行而不是第一行?它需要2个参数,一个函数和其他东西,为什么它有2个箭头?

Filterable f => (a → Boolean) → f a → f a

Filterable f => (a → Boolean) , f a → f a

1 个答案:

答案 0 :(得分:1)

这是currying。简而言之,您可以替换多个参数的函数:

const f = (x, y) => x + y;

f(1, 2) // 3

使用一个参数的一系列函数:

const f = x => y => x + y;

f(1)(2) // 3

一个优点是partially apply更容易使用curry函数:

const add1 = f(1);

add1(2) // 3

这在Haskell中广泛使用,它似乎是ramda.js的灵感来源,反过来又是Haskell所依赖的lambda calculus

请注意,函数箭头类型是右关联的,因此它们是等效的:

Filterable f => (a → Boolean) →  f a → f a
Filterable f => (a → Boolean) → (f a → f a)

通过这种方式,此类型的函数会将a上的谓词转换为f的{​​{1}} s上的转换。

还有与简单代数的关系:在类型理论中,元组a对应于产品(a×b),而函数箭头(a, b)对应于取幂(b a )。您可以在a → ba → b → c之间进行转换,原因与您可以在(c b a 和c b×a之间进行转换的原因相同