目前我有以下结构:
let rec foo x = State.state{
let rec bar =
//...
foo 5
//...
//...
bar
//...
}
Run Code Online (Sandbox Code Playgroud)
我想提取'bar'函数并获得如下结构:
let rec foo x = State.state{
//...
bar
//...
}
and bar = State.state{
//...
foo 5
//...
}
Run Code Online (Sandbox Code Playgroud)
这将允许我有另一个函数foo2,它也可以使用bar并避免代码重复.
问题是:我的提案没有在F#中编译,显然这是因为State上下文.那么达到所需代码结构的语法正确方法是什么?
这对我来说很好:
let rec foo x =
async {
return! bar x
}
and bar x =
async {
if x = 0
then printfn "bar"
else do! foo (x - 1)
}
Async.RunSynchronously (foo 10)
Run Code Online (Sandbox Code Playgroud)
我首先遇到格式化问题,因此请确保您的缩进正确并且您的感叹号位于正确的位置,否则类型将无法解决.