an extendable  type system