logoalt Hacker News

xigoitoday at 1:10 PM4 repliesview on HN

Why is `pure` a keyword that needs to be added, with impure being the default? This discourages programmers from marking functions as pure. I like how Nim does it, with `func` declaring a function (pure) and `proc` declaring a procedure (impure).


Replies

adamddev1today at 2:12 PM

I also really like the distinction between a function and procedure. The function is a pure mathematical function. The procedure is a series of instructions.

rtfeldmantoday at 3:13 PM

Roc defaults functions to being pure, and functions that can run side effects are inferred to have a different type by the compiler based on usage. By convention, their names should also end in `!` (e.g. `transform` for the name of a pure function and `transform!` if it does side effects), and the compiler warns you if you don't follow that convention.

https://github.com/roc-lang/roc/blob/b2503210da6b58a4ce1254d...

onlyrealcuzzotoday at 1:36 PM

I would also recommend this default.

We want languages that encourage good design.

If your goal is - like Crystal - to be as pain free of a migration from Python to Blorp, this shouldn't really impact it, since the compiler can and should be able to auto-fix this.

miroljubtoday at 3:19 PM

> Why is `pure` a keyword that needs to be added, with impure being the default?

Marketing.

Instead of reading the code littered with "impure" keywords, you look at the beautiful code marked as "pure".

show 1 reply