I want fast mutable arrays. ST vs IO, and the 'U' unboxed version. First, what is ST? http://hackage.haskell.org/package/base-18.104.22.168/docs/Control-Monad-ST.html Basically, IO for "inner loops". http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.144.2237&rep=rep1&type=pdf EDIT: This is quite cool. I ran into this before, but could not quite appreciate the importance. This means there is as good as no reason to go out of Haskell, besides platform size (i.e. Haskell is big). Not simple though. Rank-2 types. I get the basic idea, but do not see exactly how to make sure that two instances of s are the same.