wrap my head around type inference