John Meacham wrote:

>On Wed, Nov 24, 2004 at 10:40:41PM +0000, Ben Rudiak-Gould wrote:
>
>>If the unsafePerformIO hack doesn't work in your new Haskell
>>compiler, you can replace it with some other magic that does work. It's
>>fine for the Haskell environment to hide impure magic behind a pure
>>interface -- that's what the language is all about.
>
>That is exactly the problem we are trying to solve. coming up with a
>sane 'magic' which interacts well with all the semantics and program
>transforms we expect to be valid in a functional setting.

Ah ha. I see the source of confusion.

I want the interface of George Russell's library to be /the/ way of creating top-level TWIs in Haskell, on which everything else is based, just as the various standard IO actions are /the/ way of doing I/O. I'm treating the implementation of his library as below the line, in the same category as GHC's internal state-threading implementation of IO. Yes, it needs special compiler support, but that support doesn't need to be standardized and doesn't need to be general.

As such, the implementation doesn't need unsafePerformIO or NOINLINE, it only needs primReadRef1#, primWriteRef1#, primReadRef2#, and primWriteRef2#, which read and write the exactly two process-global refs supported natively by the runtime system. (Two because his implementation happens to use two global IORefs, but of course that could be reduced to one.) Everyone else who wants global IORefs gets them through the high-level interface built on those two primitive ones.

You are treating the implementation of his library as above the line, and proposing a different primitive with which it can be implemented. Nothing wrong with that, but I claim it's not /necessary/, because his library alone is enough.

-- Ben

P.S. I'm getting tired of calling it "George Russell's library" -- can anyone suggest a better name?

_______________________________________________
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to