[Haskell-beginners] Re: testing and the culture of Haskell
ml at isaac.cedarswampstudios.org
Fri Jan 22 16:16:44 EST 2010
Adrian Adshead wrote:
> add_impure :: Integer -> IO Integer
> add_impure x = return (x + 5)
> add_pure is clearly a pure function. add_impure while it is
> totally side effect free and therefore fulfills the definition
> of purity, is impure as far as the compiler is concerned since
> I (the programmer) have told the compiler that I do not guarantee
> that the function is pure.
> Please let me know where I am misunderstanding purity.
Because, actually, (IO Integer) represents an action but it'll only be
executed if it's sequenced somewhere under main. e.g.
main :: IO ()
main = do
let io_action = something_impure x y z
-- nothing has happened yet!
-- now we've executed the impure action *twice*! (But some of
-- the pure computation based on x y and z that determined
-- what actions io_action should be, might be shared)
(a simplistic example... io_action can do different things each time
it's executed based on any reason it can execute in IO, such as, reading
the system clock)
More information about the Beginners