type extraction only occurs once