次のように書きたいと思います。
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()