remove nullable, improve error messages, validate at compilation time