>>49don't conflate category theory ideas like inital alegebras and folds with the cappy 'likelist' typeclass they've come up with and happened to call fold.
exercise:
(1) Define a foldable instance on your Expression a type (change it so Number Int is Number a).
(2) Remember how in category theory the identity function is an example of a fold? Define that using foldr :: (a->b->b)->b->f a->b
1 is possible of course but 2 is not, because it's not a real fold.
fuck what these people are doing to destroy this once beautiful language. Seriously? Am I the only one seeing this happening? They keep moving further and further away from mathematically justified things.