альтернатива классам типов? - PullRequest
12 голосов
/ 08 сентября 2010

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

1 Ответ

20 голосов
/ 08 сентября 2010

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

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

Или измените дизайн, чтобы вам не нужны классы типов. (Это всегда кажется болезненным, так как классы типов - лучшая вещь в мире, и их трудно оставить позади, но до появления 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)
...