Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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)