The other caveat, I suppose, is that by all accounts we can treat this is a classic 'Special Case' pattern. The absence of value is handled differently for each type, and can even contain its own behaviour. So the general-purpose constructs such as Maybe only end up being practical for highly anemic types, such as pure data types.