Альтернатива классам типов?

Программист на Haskell используя F#. нет классов типов в F#. что использовать, когда мне нужны классы типов?

1 ответ

Проверьте это, как кто-то предложил.

Я думаю, что краткий ответ - передать словари операций (как это сделал бы Хаскелл; свидетель по делу).

Или измените дизайн, чтобы вам не нужны классы типов. (Это всегда кажется болезненным, так как классы типов - лучшая вещь в мире, и их трудно оставить позади, но до появления Haskell и классов типов люди все же умудрились программировать в течение 4 десятилетий ранее без классов типов, так что делают то же самое, что делали эти люди..)

Вы также можете получить немного способов с inline статические ограничения членов, но это становится ужасно быстро.

Вот пример словаря операций:

// type class
type MathOps<'t> = { add : 't -> 't -> 't; mul: 't -> 't -> 't }  //'

// instance
let mathInt : MathOps<int> = { add = (+); mul = (*) }

// instance
let mathFloat : MathOps<float> = { add = (+); mul = (*) }

// use of typeclass (normally ops would the 'constraint' to the left of 
// the '=>' in Haskell, but now it is an actual parameter)
let XtimesYplusZ (ops:MathOps<'t>) x y z =   //'
    ops.add (ops.mul x y) z

printfn "%d" (XtimesYplusZ mathInt 3 4 1)
printfn "%f" (XtimesYplusZ mathFloat 3.0 4.0 1.0)
Другие вопросы по тегам