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

よし。

多分続く。