หากหน่วยความจำที่คุณเข้าถึงสามารถเปลี่ยนแปลงได้แสดงว่าเป็นผลข้างเคียง
ตัวอย่างเช่นใน Haskell ฟังก์ชันเพื่อเข้าถึงอาร์เรย์ที่ไม่แน่นอน ( IOArray
) มีประเภท
Ix i => IOArray i e -> i -> IO e
(ลดความซับซ้อนลงเล็กน้อยเพื่อจุดประสงค์ของเรา) ในขณะที่การเข้าถึงอาร์เรย์ที่ไม่เปลี่ยนรูปแบบมีประเภท
Ix i => Array i e -> i -> e
รุ่นแรกส่งคืนสิ่งที่ประเภทIO e
ซึ่งหมายความว่ามันมีผลข้างเคียงของ I / O รุ่นที่สองเพียงคืนองค์ประกอบประเภทe
โดยไม่มีผลข้างเคียงใด ๆ
ในกรณีของการเข้าถึงไฟล์คุณไม่สามารถรู้ได้ในเวลารวบรวมว่าไฟล์นั้นจะมีการเปลี่ยนแปลงระหว่างการรันโปรแกรมหรือไม่ ดังนั้นคุณจะต้องถือว่ามันเป็นการดำเนินงานที่มีผลข้างเคียงที่อาจเกิดขึ้น