The first typed programming language where I've seen pipe operator
|> in action was in F#. You can write something like:
sum 1 2
|> multiply 3
and it works because
|> pushes the output of the left expression as the last parameter into the right-hand function.
multiply has to be defined as:
let multiply b c = b \* c
so that
b becomes 3, and
c receives the result of
sum 1 2.
RHS can also be a lambda too:
sum 1 2 |> (fun x -> multiply 3 x)
|> is not a syntactic sugar but is actually defined in the standard library as:
let (|>) x f = f x
For function composition, F# provides
>> (forward composition) and
<< (backward composition), defined respectively as:
let (>>) f g x = g (f x)
let (<<) f g x = f (g x)
We can use them to build reusable composed functions:
let add1 x = x + 1
let multiply2 x = x \* 2
let composed = add1 >> multiply2
F# is a beautiful language. Sad that M$ stopped investing into this language long back and there's not much interest in (typed) functional programming languages in general.
RHS can also be a lambda too:
|> is not a syntactic sugar but is actually defined in the standard library as: For function composition, F# provides >> (forward composition) and << (backward composition), defined respectively as: We can use them to build reusable composed functions: F# is a beautiful language. Sad that M$ stopped investing into this language long back and there's not much interest in (typed) functional programming languages in general.