3

これら 2 つのトランスフォーマーを結合しようとすると、警告やエラー メッセージが表示されずに fsi がブロックされます。

open FSharpPlus
open FSharpPlus.Data

type MyError = | Err of string

let f : WriterT<ResultT<Async<Result<_, MyError>>>> = monad {
    do! liftAsync <| Async.Sleep 30
    do! tell ["abc"]
    let! r0 = lift<| ResultT.hoist (Ok 25)
    return r0 + 5
    }

let g = monad {
    let! r1 = f
    do! tell ["def"]
    do! liftAsync <| Async.Sleep 50
    let! r2 = lift<| ResultT.hoist (Ok 2)
    return r1 + r2
    }

let runStackT stack = stack |> WriterT.run |> ResultT.run |> Async.RunSynchronously

#time "on"
let finalResult = runStackT g
#time "off"

何が問題で、このコードを機能させる方法は?

4

1 に答える 1