I like the idea of defining error types so you can do some dispatch on it?