Any cache that is provided by an external process, or even by a remote machine, such as memcached.
I guess I should clarify and say "What sort of a cache would use IO and make a pure function impure?". Even if the cache is so large that it doesn't fit in memory, its behaviour would still be referentially transparent.
That's only if you don't count the IO itself as a side-effect.
Does a language like Haskell give you the choice? If so,would it be idiomatic?
A cache too big to fit in memory
One you want to keep around between invocations of the program?