Я пытаюсь эмулировать систему классов типов в F#; Я хотел бы создать парный принтер, который автоматически создает правильную серию вызовов функций печати. Моя последняя попытка, которая вставлена здесь, потерпела неудачу, поскольку F# не может определить правильную перегрузку и немедленно сдается:
type PrintableInt(x:int) =
member this.Print() = printfn "%d" x
let (!) x = PrintableInt(x)
type Printer() =
static member inline Print< ^a when ^a : (member Print : Unit -> Unit)>(x : ^a) =
(^a : (member Print : Unit -> Unit) x)
static member inline Print((x,y) : 'a * 'b) =
Printer.Print(x)
Printer.Print(y)
let x = (!1,!2),(!3,!4)
Printer.Print(x)
Есть ли способ сделать это? Я делаю это в контексте разработки игр, поэтому я не могу позволить себе накладные расходы во время выполнения на отражение, перепечатку и динамическое приведение: либо я делаю это статически через встраивание, либо не делаю этого вообще :(