[Haskell-cafe] copy-on-write monad?