aggregate() return type fixed to T