在Typed Racket中,如果我有以下类型和功能:
(define-type A (U 'one 'two))
(define (f [a : A]) : A
a)
然后函数调用(f 'one)
typechecks。但是,如果我使用文字数字作为联合类型的组件,如下所示:
(define-type B (U 1 2))
(define (g [b : B]) : B
b)
然后(g 2)
无法使用类型错误进行类型检查:
Type Checker: type mismatch
expected: B
given: Positive-Byte in: 2
但是,(g 1)
类型检查因为1
拥有自己的类型One
。
我可以使用(g (ann 2 B))
(或(g #{2 :: B})
)来解决问题,但这很麻烦且很麻烦。这是Typed Racket处理数值类型的基本限制,还是有办法使显式类型注释变得不必要?