Is it possible to make the following example fully polymorphic in F#?
type Mul = Mul with member inline __.Op(a: ^a,b: ^a) = a*b type Div = Div with member inline __.Op(a: ^a,b: ^a) = a/b type Add = Add with member inline __.Op(a: ^a,b: ^a) = a+b type Sub = Sub with member inline __.Op(a: ^a,b: ^a) = a-b let inline op x a b = (^a: (member Op: ^b * ^b -> ^b) x,a,b) let inline tup2 a b c d = op Mul a b, op Mul c d let inline tup2' f a b c d = op f a b, op f c d let a = tup2 1 2 3.0f 4.0f //let b = tup2' Mul 1 2 3.0f 4.0f //Gives a type error. I am wondering if there is a way to make the types do what I want in the example above or if I have finally reached the