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 e
que significa que tiene efectos secundarios de E / S. La segunda versión simplemente devuelve un elemento de tipo e
sin 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.