This note is in Control.Monad.Memoize. It is referenced at:
The MonadMemoize instance for MemoizeT requires MonadIO, which is unsatisfying. The only reason the constraint is needed is to implement knot-tying via IORefs (see Note [Tying the knot] above), which really only requires the power of ST. Alternatively, it might be possible to use the ST monad instead, but that has not been done for historical reasons.