John Meacham wrote:
On Thu, Apr 27, 2006 at 11:09:58AM +0100, Adrian Hey wrote:
What really frustrates me about all this is that AFAIK there are no
significant technical or theoretical reasons why we can't get
this safety (without resort to the unsafePerformIO hack). The
only serious obstacle seems political, with this very strange but
apparently widespread dogma about so called "global variables"
being inherently evil, regardless of the circumstances or purpose
for which they are used.
indeed. perhaps we just need to come up with a more functional name
than 'global variables'. like 'universal monad' or 'world
transformer', maybe 'augmented IO'. :)
I like "augmented IO", because this makes it clear that there is absolutely
no difference between the existing IO monad which keeps track of global
RealWorld state, and an augmented IO monad which keeps track of RealWorld +
state of IORefs needed internally by different components of a software
system.
At the moment, there is a strange unnatural discrepancy between the fixed
set of built-in privileged operations such as newUnique which are "allowed"
to make use of global state and user defined operations which have to rely
on a shaky hack in order to preserve natural abstraction barriers between
components such as a user-defined Unique, Atom, and anything involving
memoisation or device management etc.
Regards, Brian.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe