new type system