This chapter explored some key language extensions and the design patterns associated with them. In particular, we looked at language extensions related to functions, datatypes, and typeclasses and encountered two major costs of language extensions:
Language extensions make Haskell more powerful but also more complex, hence the sentiment:
"Whenever you add a new feature to a language, you should throw out an existing one (especially if the language at hand is named after a logician)" | ||
--Fun with Phantom Types, Hinze |