Purpose Add flexibility to the program without changing codes behind the Abstraction Achieved with Inheritance Polymorphism Closure Monad