Questions tagged «polymorphism»


2
未装箱类型上的高级多态
我有一门语言,默认情况下会将类型取消装箱,并且基于Hindley–Milner进行类型推断。我想添加更高级别的多态性,主要用于处理存在类型。 我想我知道如何检查这些类型,但是我不确定在编译时该怎么做。目前,我通过生成专门化来编译多态定义,就像C ++模板一样,以便它们可以与未装箱的值一起使用。例如,给定的定义f<T>,如果程序仅调用f<Int32>和f<Char>,则仅那些专门化内容会出现在已编译程序中。(我现在假设是整个程序的编译。) 但是当将多态函数作为参数传递时,我看不到如何静态生成正确的专业化,因为可以在运行时选择该函数。除了使用方框表示法,我别无选择吗?还是有办法解决这个问题? 我的第一个想法是以某种方式将等级n多态编码为等级1,但我一般认为这是不可能的,因为构造逻辑中的公式不一定具有先验范式。

1
在System Fàla Church中,我们可以自动为所有消除类型推断吗?
问题如下。通常,当一个词有Λ X。ŤΛX.t\Lambda X.t,我们可以通过消除FORALL 适用这个词的类型,为实例(Λ X。吨)[ Ť] → t [ X:= T](ΛX.t)[T]→t[X:=T](\Lambda X.t)[T]\to t[X:=T]。 现在,假设这是一个箭头,并且我们想给它一个参数,那么我们将需要将此术语应用于适当的类型,以便它可以接收这样的参数。这就是我要问的问题:是否可以构造一个函数Fff 取两个词并返回一个类型 F&lt; Λ X。t &gt; &lt; r &gt;f&lt;ΛX.t&gt;&lt;r&gt;f<{\Lambda X.t}><{r}> 给我们需要替换的类型 XXX 在 ttt 这样 ttt 可以接受论点 rrr? 一些例子: f&lt;ΛX.λxX→X.t&gt;&lt;λxT.x&gt;=Tf&lt;ΛX.λxX→X.t&gt;&lt;λxT.x&gt;=Tf<{\Lambda X.\lambda x^{X\to X}.t}><{\lambda x^T.x}>=T。 f&lt;ΛX.λxX.r&gt;&lt;(λxR.tT) s&gt;=Tf&lt;ΛX.λxX.r&gt;&lt;(λxR.tT) s&gt;=Tf<{\Lambda X.\lambda x^X.r}><{(\lambda x^{R}.t^T)~s}>=T
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.