afaik, this is fine. in fact, i use this idiom very frequently, so if it's bad, i've never seen the badness of it.
On Tue, 30 Dec 2003, John Meacham wrote: > so, A common idiom when using Control.Monad.ST is to do some > complicated, state using computation to compute a big array which is > then used purely functionally as a read-only array in the rest of the > program. > > to avoid the cost of copying the array at the end, we are forced to use > 'unsafeFreeze'. it occurs to me that this particular idiom can actually > be done safely, by adding the following... > > runSTArray :: (forall s . (ST s (STArray s i e))) -> Array i e > runSTUArray :: (forall s . (ST s (STUArray s i e))) -> UArray i e > > now, since these discard 's' and hence the ability to modify the arrays > they return, they may safely use the final arrays directly as if they > were immutable. > > the routines are also very easy to implement: > runSTArray st = runST $ st >>= unsafeFreeze > runSTUArray st = runST $ st >>= unsafeFreeze > > > so, is my logic correct? that runSTArray and runSTUArray need not be > considered unsafe? if so, perhaps we should add these (or some better > generalization that someone comes up with) to the standard libraries, as > it would be nice to be able to use this idiom without resorting to > trickery. (well, user visible trickery at least) > John > > -- Hal Daume III | [EMAIL PROTECTED] "Arrest this man, he talks in maths." | www.isi.edu/~hdaume _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell
