
1{- Dear Group, I am trying to do something that I think should be very simple, but I just can't seem to figure out how. The idea is that I want to use runSTUArray to build up an array, but I want to look at the array after each iteration and possiblely accumulate some elements. -} import Debug.Trace import Control.Monad import Control.Monad.ST import Data.Array.ST incArray arr index = do x <- readArray arr index writeArray arr index (x+1) checkArray = filter (\(i,e) -> e == 1) run = runSTUArray ( do a <- newArray (0,9) 0 :: ST s (STUArray s Int Int) all <- forM [1..10] (\i -> do let j = i `mod` 4 incArray a j b <- getAssocs a -- now run something like checkArray and build up a list of "wanted" elements -- which I would like to return from run, but I don't see how return b) -- Or, if I cound run (lazily) on "all" (the result of the forM) -- I could do my accumulation let theAnswerIWant = concatMap checkArray all return (trace (show theAnswerIWant) a)) -- I can't seem to return anything but a here {- result is: array [(1,1),(1,1),(2,1),(1,1),(2,1),(3,1),(0,1), (1,1),(2,1),(3,1),(0,1),(2,1),(3,1),(0,1),(3,1), (0,1)] (0,9) [(0,2),(1,3),(2,3),(3,2),(4,0),(5,0),(6,0),(7,0),(8,0),(9,0)] is there any way to get theAnswerIWant out of run? Thanks in advance for any insights. -}