Racket 如何避免带有文字数字和基于文字数字的类型的类型注释?
在类型化球拍中,如果我具有以下类型和功能:Racket 如何避免带有文字数字和基于文字数字的类型的类型注释?,racket,typed-racket,Racket,Typed Racket,在类型化球拍中,如果我具有以下类型和功能: (define-type A (U 'one 'two)) (define (f [a : A]) : A a) 然后函数调用(f'one)类型检查。但是,如果我使用文字数字作为联合类型的组件,如下所示: (define-type B (U 1 2)) (define (g [b : B]) : B b) 然后(G2)无法进行类型检查,出现类型错误: Type Checker: type mismatch expected: B g
(define-type A (U 'one 'two))
(define (f [a : A]) : A
a)
然后函数调用(f'one)
类型检查。但是,如果我使用文字数字作为联合类型的组件,如下所示:
(define-type B (U 1 2))
(define (g [b : B]) : B
b)
然后(G2)
无法进行类型检查,出现类型错误:
Type Checker: type mismatch
expected: B
given: Positive-Byte in: 2
但是,(g1)
类型检查,因为1
有自己的类型,One
我可以用
(g(ann2b))
(或(g#{2::B})
解决这个问题,但这样做既麻烦又麻烦。这是Typed Racket处理数字类型的基本限制,还是有办法使显式类型注释变得不必要?(G2)
对我来说很好(Racket 6.1.1)。在6.1.1.2上对我来说很好。同样回到6.0——重写后使用单独的:
,(:g(B->B))(define(gb)B)
——因为TR当时没有提供自己的define
。也许你的例子不小心简化得太多了?@GregHendershott-我当时运行的是6.1.0.5,但它不起作用,但是你建议重写以使用:
修复了它。我真的很好奇为什么define
过去总是这样做。@Jack,我不知道。这个问题最好放在Racket邮件列表上,或者放在一些打字的Racket开发者经常光顾的#Racket IRC频道上。