add functional programming