[Haskell-cafe] Re: [Haskell] Top Level <-

Ganesh Sittampalam ganesh at earth.li
Sun Aug 31 10:39:00 EDT 2008

On Sun, 31 Aug 2008, Adrian Hey wrote:

> Thanks for taking the time to do this Dan. I think the safety 
> requirement has been met, but I think it fails on the improved API. The 
> main complaint would be what I see as loss of modularity, in that 
> somehow what should be a small irrelevant detail of the implementation 
> of some obscure module somewhere has propogated it's way all the way 
> upto main.

That's the key point, as I see it - they aren't "irrelevant details of the 
implementation", they are requirements the implementation places on its 
context in order for that implementation to be correct. So they should be 
communicated appropriately.

> To me this seems completely at odds with what I thought was generally
> accepted wisdom of how to write good maintainable, modular software.
> Namely hiding as much implemention detail possible and keeping APIs
> as simple and stable as they can be. I don't know if I'm alone in
> that view nowadays.

It's no problem to hide implementation detail, but I don't think you 
should hide the *requirement* of the implementation that it has 
constraints on how it is called, namely that it requires once-only 
initialisation or whatever.

> Purists aren't going to like it, but I think folk *will* be using "real"
> global variables in I/O libs for the forseeable future. Seems a shame
> that they'll have to do this with unsafePerformIO hack though :-(

>From a "purist" point of view, it's a shame that they choose to do it at 
all :-)


More information about the Haskell-Cafe mailing list