F# 使用F在Suave.IO中编写web部件连续体#
使用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
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