modified to return more descriptive error messages, programmer defined error messages, `Maybe' wrapped results and default values. These functions can be used to reduce the number of unsafe pattern matches in your code. ok jasper@