An FRP I/O read can be considered referentially transparent if reads are repeatable; that is, the data you read is treated as a snapshot, and multiple (filesystem/network) reads from the same snapshot return the same value. Then only writes need to be handled as procedural.
Time, or some snapshot identifier, must be a parameter to the read operation for this to actually be referentially transparent.