在F#中组合功能和管道运算符

时间:2016-11-07 15:03:38

标签: f# pipeline

我正在开发一个项目,我想创建一个非常紧凑的方法来创建实体和属性。

我想用管道运营商做这件事。但我想为此运营商添加额外的功能。

例如:

let entity = (entity "name")
                 |>> (attribute "attr" String)
                 |>> (attribute "two"  String)

在此示例中|>>将是一个管道操作符以及向该实体添加属性的功能。

我知道这有效:

let entity = (entity "name")
             |> addAttr (attribute "attr" String)

所以我想知道的是,如果可以替换

|> addAttr

|>> 

感谢您的帮助

(我不知道这是否可能)

2 个答案:

答案 0 :(得分:9)

你可以简单地定义它:

let (|>>) e a = e |> addAttr a

答案 1 :(得分:4)

为了便于阅读,我强烈建议在简单函数执行时添加自定义运算符。您可以更改addAttr的编写方式,以便在管道中更容易使用:

let addAttr name attrType entity = () // return an updated entity

let e =
    entity "name"
    |> addAttr "attr" String
    |> addAttr "two"  String