If i am just looking at this from a language design view point and not at the programers experience an ability then i would say (a) is the better way to go about error checking there can be minor errors dealing with uniformity and orthogonality that is unseen to the programer but the error checking will notice it for you but (b) throws all that away and lets the programer handle it all, much less efficient