0

私がやりたいのは、変換関数を繰り返し渡して組み合わせた変換を受け取ることができる関数を持つことです。変換関数は '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)

そのため、結合された入力を呼び出すだけで、ワークフローの結果を取得できます。

これは、値の制限に達したり、コンパイラがすべてのトランスフォーマーを同じ型に制限したりすることなく可能でしょうか?

4

1 に答える 1

3

私はあなたの質問を受け取ったかどうかよくわかりません.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"    
于 2011-06-12T09:58:26.190 に答える