两种使用自己的类型

TrN*_*TrN 1 f# fluent-interface

最近我用F#开始冒险.我正在尝试创建我将在C#项目中使用的F#库.

现在我面临的问题是我有两种类型的定义(如我所愿)可以自己使用(我正在尝试为c#用法创建流畅的API).

我想如何在c#中使用它(简化示例).

Shopping shopping = new Shopping(); 
Stuff[] stuff = shopping.GoTo("Wallmart").Buy(new [] { "Candies", "Ice cream", "Milk" }).GoTo("Drug store").Buy(new [] { "Anvil" }).GetStuff();
Run Code Online (Sandbox Code Playgroud)

现在我有两种类型(在separted文件中):

type ShopResult(someContext: ShoppingContext) =
 //some logic
 member this.GoTo shopName = new ToDoResult(someContext)

type ToDoResult(someContext: ShoppingContext) = 
 //some logic
 member this.Buy what = new ShopResult(someContext) 
Run Code Online (Sandbox Code Playgroud)

现在文件顺序导致编译错误,我想知道我的案例是否有任何解决方案?还是让我放弃流畅的api想法?

ild*_*arn 6

将两种类型放在同一个文件中,并将定义更改为以下内容:

type ShopResult(someContext: ShoppingContext) =
    //some logic
    member this.GoTo shopName = new ToDoResult(someContext)

and ToDoResult(someContext: ShoppingContext) = 
    //some logic
    member this.Buy what = new ShopResult(someContext)
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅MSDN上语言参考 "相互递归类型"部分.