Istnieje wiele funkcjonalnych idiomów: monady, aplikacje, strzałki itp. Są one udokumentowane w różnych artykułach, ale niestety nie znam żadnej książki ani artykułu, w których są podsumowane w jednym miejscu (jest Typeklasopedia, ale jest dużo obszarów, które nie są dobrze pokryte). Czy ktoś może polecić artykuł / książkę, która dobrze je opisuje w jednym miejscu i która jest dostępna dla programisty ze średnio zaawansowanymi umiejętnościami w zakresie FP?
scala
haskell
functional-programming
monads
Konstantin Solomatov
źródło
źródło
Odpowiedzi:
Jeśli chcesz nauczyć się Scali, proponuję przeczytać książkę Paula Chiusano i Runara Bjarnasona:
http://manning.com/bjarnason/
Część II: Projektowanie funkcjonalne i biblioteki kombinatorów
Część III: Funkcjonalne wzorce projektowe
Część IV: Łamanie zasad: efekty i I / O
źródło
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.
Najistotniejszym artykułem na twoje pytanie jest z pewnością pierwszy, ale pozostałe dwa mogą być jednak interesującymi powiązanymi lekturami.
źródło
Jeremy Gibbons prowadzi blog Patterns in FP, który ostatecznie ma stać się książką, o którą prosisz. Oczywiście nie jest to jeszcze w stanie, aby być tak użytecznym, jak byś chciał w tej chwili, ale zasługuje na zachętę!
W międzyczasie powiem +1 dla Typeklasopedii Brenta Yorgeya. Jest to naprawdę przydatne, a jeśli są późniejsze części, które mylą, ta strona jest dobrym miejscem, aby dotrzeć do ich sedna. Wiem, że Brent kontroluje to. Jeśli nie dociera do swoich czytelników, pomóż mu.
źródło
Wiele materiałów FP jest publikowanych na stronie Olega: http://okmij.org/ftp/
Prezentacja o wzorach FP od Josha Sueretha: http://jsuereth.com/intro-to-fp/
źródło
Czy przeczytałeś późniejsze rozdziały Learn You a Haskell for Great Good ?
Rozdział 6 obejmuje mapy i fałdy, które są dwoma ważniejszymi „wzorcami projektowymi” w językach funkcjonalnych.
Rozdziały 11-13 omawiają funktory, funktory aplikacyjne i monady w tej kolejności. Jest to pomocne - wiele tutoriali wprowadza funktory, a następnie monady, a na końcu dodajemy funktory aplikacyjne (jeśli w ogóle je obejmują). Porządek w LYAH jest lepszy, ponieważ przejście z Functors => Applicative Functors => Monady przesuwa cię stopniowo w górę po drabinie ogólności i mocy.
Rozdział 14 dotyczy Zipperów - możesz o nich efektywnie myśleć jak o klasach kontenerów ze wskaźnikiem do określonej części danych, co oznacza, że uzyskujesz dostęp O (1) i aktualizujesz je w miejscu wskaźnika.
Nie obejmuje strzałek ani Comonad, które są bardziej zaawansowanym tematem w Haskell. Aby zrozumieć, jak i dlaczego używać strzałek lub komonad, zdecydowanie powinieneś mieć już solidną wiedzę na temat monad, więc nie sądzę, aby to był problem - LYAH jest mocno skierowany do początkujących użytkowników rynku Haskell.
źródło