Instead of rewriting modifySTRef, why not just do : modifySTRef counter (\x -> let y = x+1 in y `seq` y)
Is there a problem with that? 2011/11/16 Johan Tibell <[email protected]> > On Wed, Nov 16, 2011 at 11:58 AM, Jason Dusek <[email protected]>wrote: > >> diff --git a/Rebuild.hs b/Rebuild.hs >> @@ -15,6 +15,7 @@ import Data.STRef >> import Data.String >> import Data.Word >> >> +import Control.DeepSeq >> import Data.Vector.Unboxed (Vector) >> import qualified Data.Vector.Unboxed as Vector (create, length) >> import qualified Data.Vector.Unboxed.Mutable as Vector hiding (length) >> @@ -46,8 +47,8 @@ rebuildAsVector bytes = byteVector >> n <- readSTRef counter >> return (Vector.unsafeSlice 0 n v) >> writeOneByte v counter b = do n <- readSTRef counter >> - Vector.unsafeWrite v n b >> + w v n b >> modifySTRef counter (+!1) >> + (+!) a b = ((+) $!! a) $!! b >> + w v n b = (Vector.unsafeWrite v $!! n) $!! b >> > > +! doesn't work unless modifySTRef is already strict in the result of the > function application. You need to write modifySTRef' that seq:s the result > of the function application before calling writeSTRef. > > -- Johan > > > _______________________________________________ > Haskell-Cafe mailing list > [email protected] > http://www.haskell.org/mailman/listinfo/haskell-cafe > >
_______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
