Linear types support is coming along nicely, there is a fork of GHC with a prototype implementation.
https://github.com/tweag/ghc/tree/linear-types
However, to allow the compiler to optimise pure operations to impure ones, I don't think linear types are sufficient. You need something like uniqueness types.