To understand monads, I think it helps to know a language where expressing such a concept is more natural. Although I do not claim to know 100% what monads are yet, coming across these features made it easier for me to understand the concept a little bit.
- Algebraic data types
- OCaml's let expressions
- F#'s computation expressions
I also think that it is important to write something that naturally requires the use of monads. One thing that spring to mind is Parser Combinators.
- https://fsharpforfunandprofit.com/posts/understanding-parser...