オーバーロードに関するメモ
Malgoに多相レコードとオーバーロードを追加したい。
構想
(+) : Num a => a -> a -> aをやりたい
Num aはユーザ定義できてほしい
型推論できてほしい
ロードマップ
f : T = x
レコード構文に;ターミネータを追加✅
class, implを追加
Row typeを追加
code:Show.mlg
module Show = {
class Show a = {
show : a -> String;
};
impl showInt32 : Show Int32 = {
show = { x -> int32ToString x };
};
print : Show a => a -> ();
print = { x -> putStr (show x) };
}
code:Num.mlg
module Num = {
class Num a = {
add : a -> a -> a;
};
impl addInt32 : Num Int32 = {
add = { x y -> addInt32 x y };
};
(+) = add;
}
A Polymorphic Type System for Extensible Records and Variants
A Polymorphic Record Calculus and Its Compilation
フィールド名がコンフリクトした時に、プレフィックスを要求する
OCamlのModular implicits
How to make ad-hoc polymorphism less ad hoc
A system of constructor classes: overloading and implicit higher-order polymorphism