Consideriamo ho due differenti biblioteca tipi:funzione e il tipo di linea di estensione
type Foo = { foo : string }
type Bar = { bar : int32 }
Voglio realizzare funzione generica zoo
che lavorerà sia per Foo
o Bar
istanze. E non posso modificare Foo
e Bar
perché fanno parte del codice della libreria.
Ecco il mio primo tentativo utilizzando le estensioni di tipo e funzione inline come spiegato here:
// Library.fs
module Library
type Foo = { foo : string }
type Bar = { bar : int32 }
// Program.fs
type Foo with
static member zoo (f : Foo) = "foo"
type Bar with
static member zoo (b : Bar) = "bar"
let inline zoo (x : ^t) =
(^t : (static member zoo : ^t -> string) x)
let f = zoo { foo = "1" } // error FS0001: The type 'Foo' does not support the operator 'zoo'
Perché non inline definizione della funzione si basa su estensioni di? Come posso risolvere il mio problema senza modificare le definizioni iniziali di tipo Foo
e Bar
?