我想写下以下内容:
module A =
type Token
let foo Token =
module B =
type Token
let foo Token =
let run (m : module) =
m.B
|> m.foo
基本上是模块中通用的函数。有没有办法在F#中做到这一点?
答案 0 :(得分:3)
正如kvb在评论中指出的那样,没有一个现实的例子很难给出答案,因为最好的方法将取决于你实际上要做的事情。
在这个简单的例子中,我可能会使用F#接口来表示Token
并添加Foo
作为成员。假设Foo
返回int
,您可以编写如下定义:
type Token =
abstract Foo : unit -> int
然后,您可以使用类(非常重量级)或使用对象表达式来实现不同的标记。例如:
let tok = { new Token with
member x.Foo () = 42 }
与run
功能相对应的代码只是Foo
成员的调用:tok.Foo()