anaList = List.unfoldr
unfoldr :: (b->Maybe (a,b)) -> b -> [a] unfoldr f b = case f b of Nothing -> [] Just (a,b) -> a : unfoldr f b
depth = cata (maximum . (0:) . map (1+) . fl_rec)
flatten' = comp . pmap (:) comp = crush (.) id