はじめに この記事は、「コモナドを使った抽象化の威力をライフゲームで試してみた」で言及されている「トーラス上のList Zipper」を実装してみました、という記事です。Comonadとして実装したList Zipperを使用してライフゲームを実装し、メモリ使用量が増加しないことを確認しました。 トーラスとは 長方形の左辺と右辺、上辺と下辺がそれぞれ繋がっているような構造です。RPGの平面マップで、右端や上端へ行くとそれぞれ左端や下端から出てくるような状況を想像するとわかりやすいと思います(平たく言えばドーナツ状の構造です)。 実装のポイント List Zipperの定義(1次元) トーラス上(2次元)のList Zipperを考える前に、リング上(1次元)のList Zipperを考えてみます。 直線上のList Zipperでは、注目点はどこまでもずらすことができますが、リング上では、