Thanks to the pipeline operator you can craft some really beautiful and readible code. Similar to commandline pipelining you can take the output of a previous function and use it as the input of the next step in your pipeline.
2 things you need to be aware of if you want to use your functions inside a pipeline construct:
1. Argument order is important
The value you want to apply the pipeline function on should be passed as the last parameter.
So this is wrong:
And this is correct:
Let’s have a look at the definition of the pipeline ‘|>’ operator:
let (|>) x f = f x
Basically what's happening here is that the value on the left of the pipe forward operator is being passed as the last parameter to the function on the right. A lot of standard F# functions are structured so that the parameter most likely to be passed down a chain like this is defined as the last parameter.
2. Be aware about the difference between a tuple and multiple parameters
A mistake I made at the beginning was that I wasn’t fully aware about the difference in function signature between a tuple and multiple parameters. If you are used to C# they look awfully similar. To be able to use the function inside a pipeline chain, you need to use the multiple parameters signature.
Here is how I first constructed my function (which is using a tuple):
With a wrong signature using tuples:
And here is the correct version:
With the correct signature:
More information: https://fsharpforfunandprofit.com/posts/defining-functions/