use type system for code sanity