は、私は2つの異なるライブラリ種類を持って考えてみましょう。 Foo
とBar
はライブラリコードの一部であるため、変更できません。 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'
インライン関数の定義は、タイプの拡張子に依存していないのはなぜ? Foo
とBar
タイプの定義を変更せずに問題を解決するにはどうすればよいですか?