
The problem is that you are trying to return a mutable array out of an ST computation. This lets the "mutability" of the computation escape. That's what the "s" type variable is for; without it, runST is just unsafePerformIO. To solve your problem, you need to eliminate any references to the state from the output of runST. I suggest looking into the function "freezeSTArray":
From http://haskell.org/ghc/docs/latest/html/libraries/base/GHC-Arr.html#v:freeze... freezeSTArray :: Ix i => STArray s i e -> ST s (Array i e)
(See my annotation at http://hpaste.org/13240#a2)
This allows you to remove any reference to the state from the array
computation. Alternatively, if you want this to be part of a larger
mutable computation, you can return the result in ST; this is what the
version of shuffle you have in the paste does.
-- ryan
On Sun, Dec 21, 2008 at 4:14 PM, Andre Nathan
Hello,
I'm trying to write a function that would take an STArray and and shuffle its elements. I'm having trouble with the ST monad, though, and couldn't find out how fix this issue.
The problem happens when I use runST to extract the shuffled array from the ST monad. I'm getting the following error:
Inferred type is less polymorphic than expected Quantified type variable `s' is mentioned in the environment: a :: STArray s Int a
The full code is at
Any help would be appreciated.
Thanks, Andre
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe