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