如何推断强制?

Dou*_*ean 5 compiler-construction types type-theory programming-languages type-inference

我想知道如何在类型推断期间推断强制转换(又名隐式转换)。我正在使用Bastiaan Heeren在Top Quality Type Error Messages 中描述的类型推断方案,但我认为总体思路在所有 Hindley-Milner 式方法中可能是相同的。

似乎强制可以被视为一种重载形式,但是本文中描述的重载方法并没有考虑(至少不是我可以遵循的方式)基于上下文对返回类型的要求的重载,即强制执行的必要条件。我还担心这种方法可能会使优先考虑身份强制以及尊重强制的传递闭包变得困难。我可以看到将每个强制表达式加糖,比如e,以 coerce( e ),但将它加糖到 coerce(coerce(coerce(... coerce( e)) ...))) 对于某些等于强制最大嵌套的深度似乎很愚蠢,并且还将强制关系限制为具有有限传递闭包的事物,其深度与上下文无关,这似乎(不必要?)有限制性。

wil*_*urd 0

您能否进一步澄清一下您到底要问什么?

我有一个小小的想法,如果我的想法是正确的,那么这个答案应该足以作为我的答案。我相信您是从创建语言的人的角度来谈论这个问题的,在这种情况下您可以以 ActionScript 3 这样的语言为例。在 AS3 中,您可以使用两种不同的方式进行类型转换:1) NewType(object),或 2) object as NewType

从实现的角度来看,我想象每个类都应该定义它自己的方法来转换为它可以转换为的任何类型(数组不能真正转换为整数......或者可以吗?)。例如,如果您尝试Integer(myArrayObject),并且 myArrayObject 没有定义转换为 Integer 的方法,则您可以抛出异常,也可以让它保持不变,只需传入原始对象(未强制转换)。

不过,我的整个答案可能完全不对劲:-D 如果这不是您要找的,请告诉我