この記事はHaskell Advent Calendar 2013の3日目の記事です。 目次 どうして? ファンクタを拡張しよう おさらい 引数をふたつ取ろう 逆転の発想 共変・反変・自由変・固定変 データ型の整理 正の位置と負の位置 自由変と固定変 ファンクタ類を自動生成しよう まとめ おまけ Thornについて CPLであそぼう どうして? ファンクタはHaskellに欠かせないものですが、ファンクタを一般化して見るという見方は意外に広まっていないように感じます。分かってしまえば単純な話だけにもったいないと思ってこの記事を書くことにしました。 また、僕は最近Thornというライブラリを作りました。これは、さまざまなデータ型から関手や畳み込み・展開をTemplate Haskellを使って自動生成するライブラリです。このライブラリを作るなかで気づいたことも合わせて書いていこうと思います。