To my surprise, the Haskell was not the difficult part for me. I spent more time wondering why this is the definition of "zero":
zero s z = z
My understanding is you can call this like so:
zero 3 7 #returns 7
So.... in what way does this relate to "zero"?
I got to the definition of "one" and that made me realize that `s` is supposed to a function (because AFAIK, Haskell can only return 1 thing). This doesn't clarify my initial confusion, but it does make the type definitions a little more concrete in my head.
Yeah... I'm going to stop reading. I think this could be written better. Maybe it would be a good reference if I already had a decent grasp of what Church Numerals are, but I don't.