When learning about new programming subjects I usually follow a pattern: I read about it, I understand it, and then I code up a few examples to make sure I really get it.
I've read a lot about monads, and I'm confident that I understand and get them. I'm now at a stage where I'd really like to code up a few monads to solidify my understanding, and really figure out what it takes to implement bind for a variety of types.
The problem is that I can't think of many obvious monads to implement, so I'm looking for recommendations. Preferably, I'd like a list of recommendations, with some easy ones and some not so easy ones.
I also realize that while monads are used to 'encapsulate' side effects in functional programs, they are also more general than that. So, I'd like the recommendations to include monads that both encapsulate side effects and some general ones.
Thanks!
(as a side note: I'll be working with f# to do this, but I think this question could apply to any functional language).