zepto-lang / zepto

A schemy Lisp backed by Haskell
GNU General Public License v2.0
60 stars 2 forks source link

RFC: `|>` should curry automatically #23

Open hellerve opened 7 years ago

hellerve commented 7 years ago

The |> function is used to pipe data through a number of functions, like so:

(|> 100
    range
    (curry filter math:even?)) => a list of all the even nummbers from 0 to 100

; It also accepts functions
(|> (lambda () (++ "Hello guys!"))
    string:upper-case
    (curry take 5)) ; => "HELLO"

While this is certainly very useful, having to curry each function quickly becomes tedious. I propose a change to the function to allow for automatic currying. This would change the above snippets to:

(|> 100
    range
    (filter math:even?)) => a list of all the even nummbers from 0 to 100

; It also accepts functions
(|> (lambda () (++ "Hello guys!"))
    string:upper-case
    (take 5)) ; => "HELLO"

The impact is limited. The function probably has to be rewritten to a macro, but it should be trivial to make this feature backwards compatible, since (curry fun) == (curry (curry fun)), so double currying is fine.

Cheers!