对于地图方法,为什么它不像第二行而不是第一行?它需要2个参数,一个函数和其他东西,为什么它有2个箭头?
Filterable f => (a → Boolean) → f a → f a
Filterable f => (a → Boolean) , f a → f a
答案 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 → b
和a → b → c
之间进行转换,原因与您可以在(c b ) a 和c b×a之间进行转换的原因相同