Job Vranish wrote:
On Sat, Feb 27, 2010 at 11:53 AM, Andrew Coppin
<andrewcop...@btinternet.com <mailto:andrewcop...@btinternet.com>> wrote:
Why an IORef? Why not an STRef? Then you won't need unsafeIOToST.
(And since the type system forces a ContextRef to exist in only
one state thread, worrying about thread isolation with
atomicModifyIORef seems unecessary.)
I use the IORefs because I wanted to use mkWeakIORef (maybe mkWeak
would work just as well?) and atomicModifyIORef. The thread isolation
is needed because of the the finalizers that clean out the map when
the references get GC'd.
Hmm, I see. (I can't actually figure out what the map does, so I can't
really comment further about that. You'd think there's a way around this
though...)
Using a state monad with a mutable structure as the state looks
highly dubious. (The whole point of a state monad is, after all,
to avoid needing to mutate stuff.) I can see 2 calls to "get", but
none to "put". I would suggest you either use a reader monad with
mutable state, or a state monad with immutable state. One or the
other. (Personally, I'd go for the latter.)
Yeah, I'll switch to Reader, but the state needs to be mutable so that
the finalizers can get to it.
Ah, I see. That at least makes sense...
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe