如何解决我该如何构建递归计算表达式生成器
| 我想做的是有一个函数,我可以反复将转换函数传递给它并接收组合的转换,该转换函数的形式为\'a-> \'b 即而不是像这样组成一个固定的工作流程:let input = async{ let! transform1 = transformAB input
let! transform2 = transformBC transform1
let! transform3 = transformCD transform2
return! transform3 }
我希望能够做到这一点:
let combined = buildTransform(transform1).Next(transform2).Next(transform3)
因此,我可以简单地调用组合输入来获取工作流程的结果。
在没有达到值限制的情况下,或者编译器将所有转换器限制为相同类型,这是否有可能?
解决方法
我不太确定是否收到您的问题,您是否需要将类似于(>>)运算符的内容应用于Async?
open System
let f1 a = async { return Int32.Parse a }
let f2 a = async { return a = 10 }
let f3 a = async { return (not a).ToString() }
// async defined via workflow syntax
// string -> Async<string>
let result a = async {
let! x1 = f1 a
let! x2 = f2 x1
let! x3 = f3 x2
return x3
}
Async.RunSynchronously (result \"10\")
|> printfn \"%s\"
let (|>>) f1 f2 arg = async {
let! r = f1 arg
return! f2 r
}
// async defined with \'combine\' operator
// string -> Async<string>
let combined = f1 |>> f2 |>> f3
Async.RunSynchronously (combined \"10\")
|> printfn \"%s\"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。