MTL
This folder does 5 things:
- walks the reader through the
Functionmonad and how to read itsdo notationand how functions can become monad transformers. At the end, we'll describe the whole point of using monad transformers. - walks the reader through the problems that led us to define the
MonadStatetype class and explains why its function's type signature is defined that way. We'll use this idea to teach the general idea behind all the other monad transformers - overviews each monad transformer
- explains what problem
MonadTranssolves and how the 'monad transformer stack' works- See Using Monad Transformers without Understanding Them and its corresponding repo: https://github.com/JordanMartinez/pure-conf-talk
- explains the limitations of monad transformers
- overviews the
ReaderT design pattern. At the end, we'll clarify when to use "monad stacks" and when to use theReaderT design pattern.
Explaining the Name
Monad Transformers are thus named because they "transform" some other monad by augmenting it with additional capabilities. One monad (e.g. Box) can only use bind and pure to do sequential computation. However, we can "transform" Box, so that it now has state-manipulating functions like get/set/modify. Purescript has defined all of these in the library called purescript-transformers.