考虑我有两个不同的库类型:联函数和类型的扩展名
type Foo = { foo : string }
type Bar = { bar : int32 }
我想实现通用功能zoo
将为要么Foo
或Bar
情况下工作。 而且我无法更改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
类型定义的情况下解决问题?