ho definito il seguente tipo (semplificato dal codice):inferenza di tipo in mancanza del tipo generico con vincolo membro statico
type Polynomial<'a when 'a :(static member public Zero : 'a)
and 'a: (static member (+): 'a*'a -> 'a)
and 'a : (static member (*): 'a*'a -> 'a) > =
| Polynomial of 'a list
with
static member inline (+) (x: Polynomial<'a> , y : Polynomial<'a>) : Polynomial<'a>=
match x,y with
|Polynomial xlist, Polynomial ylist ->
let longer, shorter =
if xlist.Length> ylist.Length then xlist, ylist
else ylist, xlist
let shorterExtended = List.append shorter (List.init (longer.Length - shorter.Length) (fun _ -> LanguagePrimitives.GenericZero<'a>))
List.map2 (+) longer shorterExtended |> Polynomial
Quando costruisco ottengo l'avvertimento: FS0193
avvertimento: A parametro di tipo manca un vincolo 'quando (^ a oppure^23604?): (static> membro (+):??^a *^23604 ->^23605)'
sulla parola "più" nell'ultima riga. Per quanto posso vedere dovrebbe essere in grado di dedurre che si aggiungono sempre due membri di 'a. Come posso sbarazzarmi di questo?
Nizza soluzione . – FZed