
Oops, I replied too hastily. What I wrote in my first mail is a problem, as witnessed by the "ix" and "ix1" in the error message. However, it isn't the main error. The main error is that you have a monadic expression, with type something like: ST s (UArray ix e) but the return type of your function is: UArray ix e To make a no-op you need to add a runST, something like: runST (unsafeThaw mem >>= unsafeFreeze) If you need to annotate 'unsafeThaw mem', that's where the ScopedTypeVariables will come in. However, there's also an issue that mentioning 's' in the type of wombat won't work with the runST, which may be a problem with the MArray constraint (and I'm not sure what to do about that off the top of my head; I've not worked with STUArray in a while, so you may be constructing an unresolvable ambiguity). Sorry for the confusion. -- Dan