haskell программист. используя F #. нет типов в F #. что использовать, когда мне нужны классные классы?
Альтернатива классам?
Ответ 1
Просмотрите этот, как кто-то предложил.
Я думаю, что короткий ответ состоит в том, чтобы передавать словари-операции (как Haskell будет под капотом, свидетелем для примера).
Или измените дизайн, чтобы вам не нужны классы. (Это всегда кажется болезненным, поскольку стили-очки лучше всего когда-либо, и трудно их оставить, но до того, как Haskell и стилисты пришли, люди все еще успевали программировать в течение 4-х десятилетий раньше как-то без стикеров, так же делают то же самое, что делали те,.)
Вы также можете немного поработать с ограничениями inline
static member, но это становится некрасиво быстро.
Здесь пример словаря операций:
// 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)