函数应用程序运算符($)在F#中?

dev*_*ium 12 .net f# functional-programming

假设我有这个代码

let identifier = spaces_surrounded (many1Satisfy isLetter)
Run Code Online (Sandbox Code Playgroud)

我想知道是否有任何原生的F#函数允许我重构它

let identifier = spaces_surrounded $ many1Satisfy isLetter
Run Code Online (Sandbox Code Playgroud)

就是这样的东西

let ($) f1 f2 = f1 (f2)
Run Code Online (Sandbox Code Playgroud)

(如果我没弄错的话,我的Haskell技能不会太尖锐......).

Joh*_*mer 18

标准的F#习惯用法就是|>你要重写的正向管道运算符

let identifier = spaces_surrounded (many1Satisfy isLetter)
Run Code Online (Sandbox Code Playgroud)

let identifier = many1Satisfy isLetter |> spaces_surrounded 
Run Code Online (Sandbox Code Playgroud)

<|如果要保持原始顺序,也可以使用反向管道运算符,但这种情况往往不太常见

let identifier = spaces_surrounded <| many1Satisfy isLetter
Run Code Online (Sandbox Code Playgroud)

  • 它是`let inline(<|)fx = fx`,如下所示:https://github.com/fsharp/fsharp/blob/master/src/fsharp/FSharp.Core/prim-types.fs (6认同)
  • 请注意,定义自己的运算符la Haskell受F#关联性/优先级规则的约束,例如,请参阅http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec.html#_Toc270597402 (3认同)
  • 以及"忽略<| stuff"比其他方式读得更好但我想这只是一个偏好(并且看着你的greps我可能是一个怪人;)).唯一认为我不喜欢的是混合<| 和|>. (2认同)