为什么typed / racket似乎坚持等哈希代码返回Integer?

时间:2014-09-30 21:13:02

标签: racket typed-racket

我正在尝试将一些普通的球拍代码移植到打字/球拍(Ubuntu 12.04.5上的6.1)。到目前为止遇到的问题之一是equal-hash-code返回的类型为Integer,尽管文档声明fixnum?。实际上,fixnum?在给出#t的结果时报告(equal-hash-code #"somebytes"),但类型为Integer。因此,当我尝试将哈希码存储为类型Fixnum时,我收到错误。代码,

(define: foo : Fixnum (equal-hash-code #"somebytes"))

触发有问题的错误。将equal-hash-code的结果转换为Fixnum可以解决错误,但这表明我每次计算哈希码时都需要执行此转换。 (此外,无论值得什么,投射值仍然报告为- : Integer [more precisely: Fixnum]。)

我担心我遗漏了一些基本的东西。有希望返回fixnum的函数应该要求将其结果强制转换为fixnum,这似乎很奇怪。

1 个答案:

答案 0 :(得分:1)

来自the Typed Racket source的一些挖掘:

[equal-hash-code (-poly (a) (-> a -Integer))]

因此,文档说谎了当前的行为。我认为值得开一个问题。


要扩展我的评论,您需要使用Fixnums吗?因为他们只是一种更具体的整数类型(即使你已经知道这个,也把这张图片放在这里):

Typed Racket Integer type breakdown

我想你可以逃避使用整数。