我想写以下内容:
module A =
type Token
let foo Token =
module B =
type Token
let foo Token =
let run (m : module) =
m.B
|> m.foo
基本上是模块中通用的功能。有没有办法在 F# 中做到这一点?
正如 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()