在 Ramda 的 API 文档中, 类型签名的语法有些"奇怪":
add: Number → Number → Number
我们结合 Ramda 的柯里化规则, 稍加推测, 可以将这个函数转换为TypeScript...=> number;
OK, 那为什么Ramda 的文档不直接使用TypeScript 表达函数的类型呢?...Ramda 文档中的类型签名使用的是Haskell 的语法, Haskell 作为一门纯函数式编程语言, 可以很简洁地表达柯里化的语义, 相较之下, TypeScript 的表达方式就显得比较臃肿....当然, 使用Haskell 的类型签名的意义不仅于此, 让我们再看看其他"奇怪"的函数类型:
ap:
[a → b] → [a] → [b]
Apply f => f (a → b) → f a → f...在类型签名中F是一个类型构造器, 既和Array一样的 「返回类型的类型」, 然而, TypeScript 里根本无法声明"一个类型参数为类型构造器".