[Haskell] Real life examples
Benjamin.Rudiak-Gould at cl.cam.ac.uk
Wed Nov 24 20:22:04 EST 2004
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.
P.S. I'm getting tired of calling it "George Russell's library" -- can
anyone suggest a better name?
More information about the Haskell