On Tue, 2 Sep 2008, Adrian Hey wrote:

Ganesh Sittampalam wrote:
You see this as a requirement that can be discharged by adding the ACIO concept; I see it as a requirement that should be communicated in the type.

Another way of looking at it is that Data.Unique has associated with it some context in which Unique values are safely comparable. You want that context to always be the top-level/RTS scope, I would like the defining that context to be part of the API.

But why pick on Data.Unique as special? Because I just happened to have
pointed out it uses a "global variable"?

Only because I thought it was the running example.

If you didn't know this I suspect this issue just wouldn't be an issue at all. Why haven't you raised a ticket complaining about it's API having the "wrong" type sigs? :-)

Because I don't use it, and even if I did use it I would just live with the API it has.

There's shed loads of information and semantic subtleties about pretty
much any operation you care to think of in the IO monad that isn't
communicated by it's type. All you know for sure is that it's weird,
because if it wasn't it wouldn't be in the IO monad.

It does actually claim a specification, namely that no two calls to newUnique return values that compare equal.

We have to have something concrete to discuss and this is the simplest.
Like I said there are a dozen or so other examples in the base package
last time I counted

Would you mind listing them? It might help provide some clarity to the discussion.

Here's what you can't find in the libs distributed with ghc. Note this
does not include all uses of unsafePerformIO. It only includes uses
to make a "global variable".

Thanks. It'd probably be a good addition to the wiki page on this topic for these to be catalogued in terms of why they are needed, though I'm (probably) not volunteering to do it :-)

Ganesh
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to