I've been happily using pipes since I found out about pipes, back in the early
80's (Thanks, Doug!). However, until recently I didn't write applications in a
programming language which supported them "internally". Recently, however,
I've been using Elixir, which does:
Pipe Operator
https://elixirschool.com/en/lessons/basics/pipe-operator/
Note that, although the basic pipe implementation simply does composition of functions
with error handling, the Stream variant offers lazy evaluation:
Enumerables and Streams
https://elixir-lang.org/getting-started/enumerables-and-streams.html
Yes, I know that F# (and probably other languages) had pipes first, but I still give
points to José Valim for stealing wisely and well. Various folks then built onto the
basic pipe mechanism, e.g.:
-
https://github.com/batate/elixir-pipes - extension library for using pattern matching
with pipes, etc.
-
https://hexdocs.pm/broadway/Broadway.html - concurrent, multi-stage tool for building
data ingestion and data processing pipelines with back pressure, etc.
fun stuff...
-r