Improved error messages
Trimmed down exception-based control flow
TODO: Flatten recursive list predicates