Przykro mi, że nie znam artykułów ani książek, które szczegółowo opisują różne zastosowania wszystkich tych konstrukcji, ale mogę podać kilka linków do poszczególnych zasobów.
Dość powszechnym wzorcem jest budowanie transformatorów monad zamiast prostych monad (zobacz także link w następnym akapicie). Zasadniczo oznacza to, że budujesz coś, co musi być połączone z innymi monadami, w wyniku czego bardziej złożona jest w stanie obsłużyć cechy obu z nich.
W Real World Haskell jest kilka rozdziałów o monadach. W rozdziale 14. Monady autorzy wyjaśniają podstawy i niektóre typowe zastosowania (być może lista, stan). Rozdział 15. Programowanie za pomocą monad zawiera więcej wyjaśnień, jak efektywnie z nich korzystać (obejmuje również monadę czytelnika). Poniższy rozdział wyjaśnia, jak używać Parseka , ale może być bardziej interesujące poszukanie artykułów opisujących, jak to faktycznie działa: powinien to być naprawdę dobry przykład dobrze zorganizowanego wykorzystania monad do parsowania. Fianlly, Rozdział 18. Transformatory monadprzedstawia sposób działania transformatorów monadowych, a następnie pokazuje, jak je zbudować, krok po kroku. Ciekawe są również rozważania dotyczące ostatnich części rozdziału.
Przeczytałem kiedyś naprawdę interesujące pytanie na SO dotyczące twórczego wykorzystania monad . Proponowane linki były świetnymi lekturami na ten temat. W tym duchu starałem się zapytać to samo o strzały : na pewno dostałem mniej odpowiedzi niż ta na monadach, ale i tak ciekawych.
Jeśli chodzi o wzorce OOP autorstwa czwórki, istnieje niezły zestaw 3 artykułów IBM na ten temat z ich serii Myślenie funkcjonalne . Docelowym językiem funkcjonalnym jest Scala. Kontynuują, wyjaśniając typowe wzorce projektowe w OOP i pokazując, jak mapują się w Scala.
- Myślenie funkcjonalne: funkcjonalne wzorce projektowe, część 1 . Tutaj dotyczą fabryk, metod szablonowych, strategii, wagi muszej. Najważniejsze jest to, że mając funkcje jako wartości pierwszej klasy, wszystko jest znacznie prostsze.
- Myślenie funkcjonalne: funkcjonalne wzorce projektowe, część 2 . Chodzi o java i groovy . Adresuje wzór adaptera.
- Myślenie funkcjonalne: funkcjonalne wzorce projektowe, część 3 . Tutaj mówią o schemacie tłumacza. Ponownie, język docelowy jest świetny.
Najistotniejszym artykułem na twoje pytanie jest z pewnością pierwszy, ale pozostałe dwa mogą być jednak interesującymi powiązanymi lekturami.