I'd prefer if this implementation did not use `cons` -- it would make it difficult to change `thrust::tuple` later.