Haskell | Smart Constructors
https://wiki.haskell.org/Smart_constructors
Dynamic dispatch mechanism of OOP
Existential types in conjunction with type classes can be used to emulate the dynamic dispatch mechanism of object oriented programming languages.