
Sumit Sahrawat, Maths & Computing, IIT (BHU) wrote:
On 15 March 2015 at 23:19,
wrote: From that perspective isn't every language pure? Haskell's still got "randomIO" and "print <=< readMVar"
Haskell is impure only when you use the unsafe* functions (atleast that's how I understand purity).
My understanding is that a language is impure if it allows one to write arbitrary IO within a function and still give it a proper (mathematical) function type. In other words impurity arises only if you can unwrap the IO monad (which is what the unsafe functions do).
The two examples you give above are pure under such a perspective, but I might be wrong.
You're right, indeed. A language is pure if supplying a value `x` of type `A` to the a function A -> B will always returns the same result, no matter how often or in which order this function is called. This is true for both randomIO :: Random a => IO a (readMVar >=> print) :: Show a => MVar a -> IO () because they return an IO action. This action will always be the same given the same arguments. The language would be impure if these functions had the types randomIO :: Random a => a (readMVar >=> print) :: Show a => MVar a -> () Best regards, Heinrich Apfelmus -- http://apfelmus.nfshost.com