optimizer doesn't add new blocks. type system