> If I use an STRef to a record, will a new record be created 
> each time I want 
> to update a single field? Or can I expect GHC to optimize it 
> and have the field of the record updated in place?

You'll get a new record for each update.  This might not be so bad
though, depending on the number of fields in your record.

> Right now I'm using a record of STRefs, like:
> data E s = E{
>       refi ::  STRef s Int,
>       refc ::  STRef s Char
>     }
> 
> but it can get a little messy, since thread s propagates to 
> every datatype that uses the record type in it's definition.

Here's another trick if you use this route:

 data E s = E{
       refi ::  !STRef s Int,
       refc ::  !STRef s Char
     }

and compile with -funbox-strict-fields.  This will eliminate the boxing
of the STRefs.

Cheers,
        Simon
_______________________________________________
Haskell-Cafe mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to