【发布时间】:2015-03-02 01:55:57
【问题描述】:
假设我有一个函数first-value,它接受一个值并返回一个忽略其输入并返回原始值的函数:
(: first-value (All (A) (-> A (All (B) (-> B A)))))
(define ((first-value a) b)
a)
如果我在 REPL 中检查这个函数的类型,我没有发现任何意外:
> first-value
- : (All (A) (-> A (All (B) (-> B A))))
#<procedure:first-value>
但是,如果我调用函数,返回函数的类型看起来有点奇怪:
> (first-value 'foo)
- : (All (g3743) (-> g3743 'foo))
#<procedure>
B 类型变量被替换为 gensym。发生这种情况有什么特别的原因吗?我正在使用 Racket 6.1.1
【问题讨论】:
-
我已经为此提交了a bug report,因为我认为这是不良行为。感谢您的信息!
标签: scheme racket typed-racket