オブジェクト指向は、それ自体はそこまで難しくない概念ですが、それを実際のアプリケーションに落としこもうとする際には考慮するべきことが多く、なので、 GoF に代表されるような、オブジェクト指向におけるデザインパターンが編み出されてきました。

Haskell で、プログラムの中心的な役割を果たすのはモナド(do 記法の syntax sugar がある、潰せる構造)ですが、それを実際のアプリケーションに落としていこうとすると、少し飛躍があるような気がします。

質問

Haskell プログラミングにおいて、オブジェクト指向におけるデザインパターンのようなものはありますでしょうか。もう少し具体的にいうと、様々なモナドがある中で、それらをどのように組み合わせて実際のアプリケーションを構築していくべきかについてのまとまった考え方、のようなものはありますか?