F-algebra と catamorphism を Haskell で理解する
wikipedia の F-algebra のページ http://en.wikipedia.org/wiki/F-algebra 参照。
上記ページに集合圏から集合圏への関手F として F(X) = 1 + X という例がでてくるが 1 + X は Haskell では Maybe X である。
Maybe の定義
data Maybe a = Nothing | Just a
の「Nothing」が「1」に、「|」が「+」に、「Just a」 が「X」にそれぞれ対応する。
F(f) は fmap f である。
F-algebra の説明にでてくる A を Bool、B を Int とし
a :: Maybe Bool -> Bool a Nothing = False a (Just x) = x b :: Maybe Int -> Int b Nothing = 0 b (Just x) = x
とすると二つの対象 F-algebra (Bool, a) と F-algebra (Int, b) が考えられる。
前者から後者への射の例としてはどんなものが考えられるだろう。例えば
f :: Bool -> Int f True = 1 f False = 0
とすると f は F-algebra (Bool, a) から F-algebra (Int, b) への射になっている。
f・a == b・F(f)
を確認しよう。
幸い Maybe Bool の要素は3つしかないのでその3つについてチェックすればよい。
> all (\x -> (f . a) x == (b . fmap f) x) [Nothing, Just True, Just False] True
よし。
多分続く。