On Wed, Nov 16, 2011 at 11:58 AM, Jason Dusek <jason.du...@gmail.com> 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 Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe