Wow. That's really nice. I've always hated overloading the meaning of undef or 0 (as you have to do in C). Having an explicit "failure" value makes life a lot nicer.
I'd be interested in more examples of using Failure, particularly P5 vs. P6.
My criteria for good software:
Does it work?
Can someone else come in, make a change, and be reasonably certain no bugs were introduced?