now with moar type inference