在 Typed Racket 中柯里化

Currying in Typed Racket

在常规 Racket 中,((curry * 2) 3) 按预期工作,结果为 6

但是,在 Typed Racket 中:

> ((curry * 2) 3)
; readline-input:3:0: Type Checker: could not apply function;
;  wrong number of arguments provided
;   expected: 0
;   given: 1
;   in: ((curry * 2) 3)
; [,bt for context]

为什么?

我认为这与 * 只能接受一个参数这一事实有关,因此当您用参数柯里化它时,它是 returning 一个不接受额外参数的过程。在 typed/racket 的命令行中键入 (curry * 2) 并观察结果:(-> Number)

请注意,只有 return 类型,没有参数。我没有在类型球拍中看到解决此问题的方法,但我希望至少可以解释为什么会发生这种情况。只要它们没有仅采用一个参数的选项,您就应该安全地对更复杂的过程使用柯里化。