ボックス化されていない型よりも上位の多態性
Hindley–Milnerに基づいて型推論を行い、デフォルトで型がボックス化されていない言語があります。主に存在型を扱うために、より高いランクのポリモーフィズムを追加したいと思います。 これらの型をチェックする方法は理解していると思いますが、コンパイルするときに何をすべきかわかりません。現在、私はC ++テンプレートのように特殊化を生成することによってポリモーフィックな定義をコンパイルし、ボックス化されていない値を処理できるようにしています。たとえば、の定義が与えられf<T>、プログラムがf<Int32>and のみを呼び出す場合、f<Char>それらの特殊化のみがコンパイルされたプログラムに表示されます。(今のところ、プログラム全体のコンパイルを想定しています。) しかし、多態性関数を引数として渡すと、実行時に関数を選択できるため、適切な特殊化を静的に生成する方法がわかりません。ボックス化された表現を使用する以外に選択肢はありませんか?または問題を回避する方法はありますか? 私の最初の考えは、なんとかしてランクnの多型をランク1としてエンコードすることでしたが、構造論理の式は必ずしも通常の形をしているわけではないので、一般にそれが可能であるとは思いません。