type Result<'TSucces, 'TFailure> =
static member Bind action (result: Result<'TSuc, 'TFail>) =
|Succes (s: 'TSuc) -> action s
|Failure (f: 'TFail) -> Failure f
static member Switch (result: Result<'TSuc, 'TFail>) =
|Failure (f: 'TFail) -> f
f 5 |> Result.Bind(h) |> Result.Switch |> printfn "%A"
g 5 |> Result.Bind(g) |> Result.Switch |> printfn "%A"
f 5 |> Result.Bind(g) |> Result.Switch |> printfn "%A"
g 5 |> Result.Bind(h) |> Result.Switch |> printfn "%A"