Hi,
As far as I understood the matter, referential transparency
denotes the property of a language, in which variables of the
same scope do not change their value.
Given
>let var = <some unmonadic expression>
> ...
> ... -- some calculation
> <some monadic expression>
> ...
> f var
>
, 'f var' is called with the same value var has been bound to, no
matter, what <some monadic expression> did.
Monadic IO is not thought ( in my opinion) to have IO during
_the whole_ program, while preserving the referential transparency.
Monads are fine to encapsulate effects, and so the IO Monad
encapsulates input/output effects _to preserve_ the referential
transparency of _the rest_ of the program. A good program
(IMHO) restricts the use of monads to where they are needed, to
increase the sideeffect free part of the program.
Correct me, if I am wrong.
Regards,
Wolfgang
---------------------------------------------------------------
Wolfgang Lohmann
[EMAIL PROTECTED]
http://www.informatik.uni-rostock.de/~wlohmann/
---------------------------------------------------------------