この記事は Haskell - Qiita Advent Calendar 2024 - Qiita の 5日目の記事です。 純粋関数型言語の Haskell では、値は基本的に不変です。リスト、Set、Map など基本的なデータ構造も不変データ構造として提供されています。 不変なデータ構造は変更をしても、変更前の値が残ります。結果、データを変更したあとも以前のデータを参照することができるという特性が得られます。この特性を指して、不変なデータのことを「永続データ」と呼び、永続データを駆使して問題を解くことを「永続データプログラミング」と呼ぶことがあります。 Haskell で関数型プログラミングをすると、自然と永続データプログラミングを実践することになります。 永続データプログラミングを支えるのが「永続データ構造」の存在です。 不変なデータで変更を表現するには、元のデータをコピーして、それ