The UnsafeST module says it's all about working around [https://ghc.haskell.org/trac/ghc/ticket/5916]. That ticket has now been closed thanks to the new runRW# primop. You should probably use that when available. You should also be able to remove the -fno-full-laziness from things using that module.