Is piping parameter into line is working only for functions that accept one parameter?
If we look at the example at Chris Smiths’ page,
// Using the Pipe-Forward operator (|>)
let photosInMB_pipeforward =
@"C:\Users\chrsmith\Pictures\"
|> filesUnderFolder
|> Seq.map fileInfo
|> Seq.map fileSize
|> Seq.fold (+) 0L
|> bytesToMB
where his filesUnderFolder function was expecting only rootFolder parameter,
what if the function was expecting two parameters, i.e.
let filesUnderFolder size rootFolder
Then this does not work:
// Using the Pipe-Forward operator (|>)
let size= 4
let photosInMB_pipeforward =
@"C:\Users\chrsmith\Pictures\"
|> filesUnderFolder size
|> Seq.map fileInfo
|> Seq.map fileSize
|> Seq.fold (+) 0L
|> bytesToMB
Since I can define
let inline (>>) f g x y = g(f x y)
I think I should be able to use pipeline operator with functions having multiple input parameters, right? What am I missing?
When mixing pipeline operators and curried arguments be aware of the order you pass arguments with.
Think about it as if the compiler is putting parentheses around the function and its parameters like this.
@"C:\Users\chrsmith\Pictures\" |> filesUnderFolder sizebecomes
@"C:\Users\chrsmith\Pictures\" |> (filesUnderFolder size)or
(filesUnderFolder size) @"C:\Users\chrsmith\Pictures\"Out of order example
With three arguments
Definitions