I'm trying to get my mind around how to thaw and then freeze a UArray.
Theoretically, what I've written below should be a no-op, but I keep
getting typing errors that I can't figure out. GHCI 6.10.3 says:
Couldn't match expected type `UArray ix a'
against inferred type `ST s (STUArray s ix1 e)'
In the first argument of `(>>=)', namely
`(unsafeThaw mem :: ST s (STUArray s ix e))'
In the expression:
(unsafeThaw mem :: ST s (STUArray s ix e))
>>=
(\ mmem -> unsafeFreeze mmem)
In the definition of `wombat':
wombat val idx mem
= (unsafeThaw mem :: ST s (STUArray s ix e))
>>=
(\ mmem -> unsafeFreeze mmem)
I'm figuring that usafeThaw with the type annotation should have given
GHIC enough clue.
Any suggestions?
-scooter
(WOMBAT = Waste Of Money Brains And Time)
import Control.Monad;
import Control.Monad.ST;
import Data.Array.ST;
import Data.Array.Unboxed;
import Data.Array.MArray;
import Data.Word;
wombat :: (IArray UArray e, Ix ix, MArray (STUArray s) e (ST s)) => e
-> ix -> UArray ix e -> UArray ix e
wombat val idx mem = (unsafeThaw mem :: ST s (STUArray s ix e)) >>=
(\mmem -> unsafeFreeze mmem)
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe