Si la memoria a la que accede puede cambiar, es un efecto secundario.
Por ejemplo, en Haskell, la función para acceder a una matriz mutable ( IOArray) tiene tipo
Ix i => IOArray i e -> i -> IO e
(ligeramente simplificado para nuestros propósitos). Al acceder a una matriz inmutable tiene tipo
Ix i => Array i e -> i -> e
La primera versión devuelve algo de tipo, lo IO eque significa que tiene efectos secundarios de E / S. La segunda versión simplemente devuelve un elemento de tipo esin efectos secundarios.
En caso de acceder a un archivo, simplemente no puede saber en el momento de la compilación si el archivo cambiará alguna vez durante la ejecución del programa. Por lo tanto, siempre debe tratarlo como una operación con posibles efectos secundarios.