其实上面的示例已经部分回答了这个问题 -- 因为更加简洁.其实Ramda 文档中的类型签名使用的是Haskell 的语法, Haskell 作为一门函数式编程语言, 其语法可以很简洁地表达柯里化的语义,...相较之下, TypeScript 的重载的表达方式就显得比较臃肿.当然, 使用Haskell 的类型签名的意义不仅于此, 让我们再看看其他"奇怪"的函数类型:ap[a → b] → [a] → [b]...→ f b该怎么翻译:type AP = (f: F B)>) => (fa: F) => F;这里的F可以理解为一种上下文..., 这段类型签名可以先简单地理解为:将一个包裹在上下文中的函数取出, 再将另一个包裹在上下文中的值取出, 调用函数后, 将函数的返回值重新包裹进上下文中并返回.这里的上下文是一个泛指, 比如我们可以将其特异化...答案是可以的, 我们可以将一个一元函数a -> b理解为"一个包裹在上下文中的b, 只不过为了获取这个b, 需要先传入一个a.为了减少语法噪音, 让我们先看看Haskell 对ap 的定义:instance