Smart destructors
See the Answer by Gabriel Gonzalez at http://stackoverflow.com/questions/10161009/input-checks-in-haskell-data-constructors
See the Answer by Gabriel Gonzalez at http://stackoverflow.com/questions/10161009/input-checks-in-haskell-data-constructors