Pipelines

Pipelines in Hades are a neat way to write out nested methods.

with list fixed from std:collections
with console from std:io

var fruits = list.of({"Apple", "Banana", "Mango", "Kiwi", "Avocado"})

fruits
|> map({x => x.toLower()})
|> filter({x => x.startsWith("a")})
|> forEach(??, {x => console.out(x)})

//As opposed to

forEach({x => console.out(x)}, filter({x => x.startsWith("a")}, map({x => x.toLower()}, fruits)))
//map(lambda, list), filter(lambda, list) and forEach(lambda, list) are static methods from the list class

//Or even

fruits.map({x => x.toLower()}).filter({x => x.startsWith("a")}).forEach({x => console.out(x)})
//map(lambda), filter(lambda) and forEach(lambda) are methods from the list class

Source

In Hades, the source of a pipeline can be any variable or statement. The source is the input parameter for the next pipeline statement.

Pipeline target with only one parameter

Example

{"Mango", "Avocado", "Orange", "Apple"}
|> sort
//is being converted to sort({"Mango", "Avocado", "Orange", "Apple"})

Pipeline target with multiple parameters

Example

{"Mango", "Avocado", "Orange", "Apple"}
|> map(??, {x=>x.toLower()})

//is being converted to map({"Mango", "Avocado", "Orange", "Apple"}, {x=>x.toLower()})

Pipelines in variable assignment

Example

var lowerList = {"Mango", "Avocado", "Orange", "Apple"}
                |> map(??, {x=>x.toLower()})

List functions with pipelines

One can import the functions defined in list as fixed and use them in pipelines on lists.

with list fixed from std:collections
with console from std:io

var fruits = list.of({"Apple", "Banana", "Mango", "Kiwi", "Avocado"})

fruits
|> map({x => x.toLower()})
|> filter({x => x.startsWith("a")})
|> forEach({x => console.out(x)})

/*
Output:
apple
avocado
*/

Last updated