cat1 :: [Integer]
cat1 = 1 : map c [1 ..]
  where c n = sum $ zipWith (*) (reverse (take n cat1)) cat1
cat1 :: [Integer]
cat1 = 1 : map c [1 ..]
  where c n = sum $ zipWith (*) (reverse (take n cat1)) cat1
cat1 = 1 : map c [1 ..]
  where c n = sum $ zipWith (*) (reverse (take n cat1)) cat1