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

Reply via email to