switch to map() to preserve concrete type