What if the cache involves IO? The behaviour is then assuredly not pure.
That said, I don't think small bounded latency is a good thing to encode in a typesystem, much as I don't think runtimes should be encoded in a typesystem. It gives too much inflexibility for too little gain.
Does a language like Haskell give you the choice? If so,would it be idiomatic?