semantic: Implement with.
semantic: Don't use switch with as the key type.