possibly even creating a new type if necessary