Haskell Advent Calendar 2016 の 12日目のエントリーです。 代数的データ型と Functor Generic Programming は代数的データ型の構造を Functor の直積と直和のネスト構造に対応付けることで、 任意の代数的データ型に対する操作の記述を可能にする仕組みです。 まずは理解のために、より単純化した構造で考えてみましょう。 次のようなデータ型 ProdF f g a を考えると、 ProdF f g は Functor f および Functor g のもとで Functor になります。 これは、 もとの Functor のそれぞれの像の直積も Functor になる ということです。 ほぼ自明な内容ですが、 functor則を満たしていることを下に簡単に示してあります。 data ProdF f g a = ProdF (f a) (g