Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Haskell isn't a pure language. Its only notable characteristic regarding purity is that it's possible to annotate whether some code is pure or not.

Isn't this a requirement (the use of the type system for annotating purity), not something that is just "possible". And isn't that what people generally mean by its purity?



IMO, a pure language would be one which is incapable of representing impure code. Or at least, where it's very hard. I don't know where the line lies, but I strongly feel that any language that supports manual memory management, pointers, and mutable variables can't properly be called "pure".

Some people get confused between purity and expressiveness. Inexpressive languages like C require using impure constructs to represent fundamentally pure constructs. More expressive languages like Python don't need as many impure workarounds. Haskell, as a very expressive language, can do amazing things in pure code that other languages must resort to impurity for.

If you want a pure language, look into Agda or Coq.


Any language that is only pure is about as useful as write-only memory.

Haskell was historically pure and had side effects added as a way to interact with the world. The language enforces (discounting unsafePerformIO) the separation of pure and impure code. That is sufficient to label any practical language pure.


> Any language that is only pure is about as useful as write-only memory.

That's actually not true -- you can write the core of a system in a pure language, then use that pure core as a library in larger applications. Pure languages like Coq and Agda are often not Turing-complete, so various sorts of verification and proofs can be applied more easily.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: