functional extension methods