![](/static/253f0d9b/assets/icons/icon-96x96.png)
![](https://programming.dev/pictrs/image/028151d2-3692-416d-a8eb-9d3d4cc18b41.png)
Nix being an expression based functional language, it doesn’t really make sense to have something like let x=y;
since this looks to most people like a statement (i.e. a line of code that gets executed as part of a sequence). This doesn’t exist in nix—instead you have expressions that get lazily evaluated, possibly out of order compared to what you’d expect. let x=y in
makes it more clear that the variable binding you’re doing is only in scope for the current expression, which reads something like “let x refer to y in x + 3”
The function definition syntax is unusual but definitely not unintuitive imo. It captures the simplicity of the function semantics of nix—a function is just a mapping/transformation from one value (or set of values) to another. I don’t think it’s too much overhead to learn that they use :
to mean this instead of =>
In terms of why they picked this syntax, it follows the traditions of other functional languages such as the ML family, Haskell etc.
My college dorm was like this. Every bathroom was ungendered. The stalls weren’t fully floor to ceiling, but were slightly better than the average public bathroom. 99% of people got over it after a little culture shock at the very beginning (maybe 2-3 days).
There was still one women-only bathroom in my building; I believe it was for a few students who asked for religious consideration. No biggie though for almost every student.
It only led to one embarrassing moment for me: I (a guy) was singing Frank Ocean at the top of my lungs while showering. When I came out of the shower a girl was brushing her teeth and made eye contact with me and kind of snickered/giggled. Racewalked back to my room 💀