Wednesday, January 4, 2017

Tips when using the pipeline operator in F#

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:

image

And here is the correct version:

With the correct signature:

image

More information: https://fsharpforfunandprofit.com/posts/defining-functions/

No comments: