问题描述
为了在泛型函数应用中推断类型变量,Typed Racket 生成约束,然后解决它们。
但是它如何处理涉及联合的约束?例如,Typed Racket 接受以下代码:
(: gen (All (t) (-> (U t Number) (U t Number))))
(define (gen x) x)
(: use (-> (U String Number)))
(define (use) (gen "")) ; interesting part: instantiating the `All` in `gen`
- 尝试使用
t = String
,如果这不起作用 - 试试
t = Number
这将是一种回溯形式。 Typed Racket 会在这里回溯吗?
这是我从消息来源了解到的:
-
约束求解并不花哨 - 与 Pierce 和 Turner 的“局部类型推断”https://github.com/racket/typed-racket/blob/6ea20be/typed-racket-lib/typed-racket/infer/constraints.rkt 相同。
-
这里有一些关于他们不想过早排除的多个约束集:https://github.com/racket/typed-racket/blob/6ea20be/typed-racket-lib/typed-racket/infer/constraint-structs.rkt#L36。不过,我看不到如何处理这些多个约束集。
-
这里有一些关于约束的“双重遍历” - 不确定这意味着什么:https://github.com/racket/typed-racket/blob/6ea20be/typed-racket-lib/typed-racket/infer/intersect.rkt#L89
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)