This is a nice clean criterion, but it's still pretty unclear to me why the zero element of a monoid should be considered falsey at all.
if x:
<destructure x, recurse on subparts>
else:
return <something>
This applies to (natural) numbers as well--'destructuring' usually means decrementing the number.