> For the complete documentation index, see [llms.txt](https://haskell.hpmeducation.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://haskell.hpmeducation.com/functors-applicatives-and-monads/monads.md).

# Monads

Let's start by saying that **monads** are difficult to grasp at first. It might take you some time and a couple of attempts to really even start to have an understanding of them, so don't worry if they seem overwhelming at the start.

Like [functors ](/functors-applicatives-and-monads/functors.md)and [applicatives](/functors-applicatives-and-monads/applicative-functors.md), **monads** provide an abstraction for chaining operations that allows us to structure our programs generically and avoid code duplication. This abstraction allows us to simplify problems like handling exceptions during execution (which we will explore shortly) by building succinct pipelines without needing to worry about flow control or side effects.

Many types we already encountered as pre-defined in Haskell are also instances of the `Monad` typeclass, including `Maybe` and `List`.
