F# 使用F在Suave.IO中编写web部件连续体#

F# 使用F在Suave.IO中编写web部件连续体#,f#,combinators,suave,F#,Combinators,Suave,使用Suave.IO,我有以下单片Web部件: let success msg = Successful.OK <| sprintf "Success: %s" msg let error msg = Successful.OK <| sprintf "Error: %s" msg let monolith arg1 arg2 = if doFirstThing arg1 then if doSecondThing arg2 then

使用Suave.IO,我有以下单片Web部件:

let success msg =
    Successful.OK <| sprintf "Success: %s" msg

let error msg =
    Successful.OK <| sprintf "Error: %s" msg

let monolith arg1 arg2 =
    if doFirstThing arg1 then
        if doSecondThing arg2 then
            success "Everything worked"
        else
            error "Second thing failed"
    else
        error "First thing failed"
但是,由于嵌套的调用,将它们组合在一起看起来很难看:

first 1 (second 2 third)
有更好的方法吗?具体来说,我是否可以在每个组件之间插入一个操作符,以便优雅地组合它们?比如:

first 1 >?> second 2 >?> third

我的直觉是这样的,但我不知道足够的范畴理论来正确地做这件事。欢迎您提供任何见解。

如果您先部分应用
然后部分应用
第二个
,它们将成为
Webpart->Webpart

然后可以使用函数合成:

first 1 >> second 2 <| third

第一个1>>第二个2啊,当然!感谢您提供这个简单而优雅的解决方案。是否有办法将
third
包装为
WebPart->WebPart
,然后在最后将其展开,以维护函数组合模式?结果类似于
first 1>>second 2>>wrap third>>unwrap
first 1 >> second 2 <| third