Jika memori yang Anda akses dapat berubah, maka itu memang efek samping.
Misalnya, di Haskell, fungsi untuk mengakses array yang dapat diubah ( IOArray
) memiliki tipe
Ix i => IOArray i e -> i -> IO e
(sedikit disederhanakan untuk tujuan kita). Saat mengakses array yang tidak dapat diubah memiliki tipe
Ix i => Array i e -> i -> e
Versi pertama mengembalikan sesuatu bertipe IO e
yang artinya memiliki efek samping I / O. Versi kedua hanya mengembalikan elemen tipe e
tanpa efek samping.
Dalam hal mengakses file, Anda tidak bisa tahu pada waktu kompilasi apakah file akan pernah berubah selama menjalankan program. Karena itu, Anda harus selalu memperlakukannya sebagai operasi dengan potensi efek samping.