1. reconstruct the type system. adding type variable