【发布时间】:2010-09-09 08:12:14
【问题描述】:
我想知道在类型推断期间如何推断强制转换(也称为隐式转换)。我正在使用 Bastiaan Heeren 在Top Quality Type Error Messages 中描述的类型推断方案,但我认为在所有 Hindley-Milner 式方法中,总体思路可能都是相同的。
似乎强制可以被视为一种重载形式,但是本文中描述的重载方法没有考虑(至少不是以我可以遵循的方式)基于上下文对返回类型的要求的重载,这是强制的必须条件。我还担心这种方法可能难以优先考虑身份强制,也难以尊重强制的传递闭包。我可以看到将每个可强制表达式(例如 e)添加到 coerce(e),但将其添加到 coerce(coerce(coerce(... coerce(e)) ) ...))) 对于某个深度等于强制嵌套的最大嵌套似乎很愚蠢,并且还将强制关系限制为具有有限传递闭包的东西,其深度与上下文无关,这似乎(不必要? ) 限制性的。
【问题讨论】:
标签: compiler-construction programming-languages types type-inference type-theory