【发布时间】:2020-07-12 13:38:16
【问题描述】:
以下代码产生名义错误:
(: f (∀ (a) (-> [#:x a] (U Integer a))))
(define (f #:x [x #f]) (or x 0))
(f #:x 3)
好的,但是(f #:x (cast 3 Integer)) 仍然会产生同样的错误。其具体值球拍试图推断的类型变量在哪里,即我需要明确指定其值的类型变量?
注意:我尝试转换 (cast (f #:x (cast 3 Integer)) Integer),但 DrRacket 仅突出显示内部的 (f ...) 表单 wrt 类型错误。
【问题讨论】:
-
如果你熟悉 Haskell,Haskell 的
::的 typed-racket 等效项是ann,而不是cast。想想ann就像::,而cast更像是通过Data.Dynamic或其他东西转换类型
标签: parametric-polymorphism typed-racket