はじめに 関数型言語スキーの皆様,趣味でも仕事でも関数型されてますでしょうか? 関数型言語の強力な特徴の一つとして不変性が挙げられます.不変性においてはletやIOモナドが注目されがちですが,真に不変性を下支えしているのは関数型言語のライブラリに含まれているListやMapといったデータ構造です.これら関数型データ構造について記述された古典が「Purely Functional Data Structures」です.これらに記述されてるデータ構造について実装と解説を書く,というのが本稿の目指すところです. 関数型データ構造とは? 正確な定義については,MITの講義ビデオ など見て欲しいのですが,重要な特徴として,全ての関数型データ構造では,操作を行う前の古い版と,操作後の新しい版の,両方が維持される点が挙げられます.(これを永続性(Persistency)と呼びます.ややこしいことに永続性