Introducing functional design patterns