Haskell jako laboratorium czystej funkcjonalności
W tej kategorii Haskell pokazuje się od strony, która najczęściej ,,kliknie" dopiero po kilku rozdziałach: czystość, leniwość i typy przestają być teorią, a zaczynają pomagać w porządkowaniu programu. Czytasz o rekurencji i funkcjach wyższego rzędu, a potem nagle orientujesz się, że te same pomysły wracają w zupełnie praktycznych zadaniach, od prostych transformacji danych po budowanie bardziej solidnych interfejsów. To trochę jak ćwiczenia z myślenia - momentami wymagające, ale bardzo satysfakcjonujące, kiedy rozwiązanie robi się zaskakująco zwięzłe.
Dobrym przykładem podejścia ,,ucz się przez zadania" jest ebook Haskell. Plac ćwiczeń dla uczonych (ebook) autorstwa Paula Callaghana, gdzie przewijają się m.in. dopasowywanie do wzorców, sterowanie i budowanie struktur danych po to, by wykonywać na nich przekształcenia. Jeśli lubisz, gdy teoria od razu ma swoje odbicie w kodzie, taki format sprawdza się zaskakująco dobrze nawet w krótkich sesjach ,,po pracy".
Od podstaw do idiomatycznych rozwiązań: typy, abstrakcje, efekty
W nauce Haskella często chodzi o rytm: najpierw proste funkcje i typy algebraiczne, potem rekurencja, a dalej już wchodzą większe abstrakcje i temat efektów ubocznych. I to wcale nie musi być bolesne. W Soar with Haskell. The ultimate beginners' guide to mastering functional programming from the ground up Toma Schrijversa widać właśnie takie stopniowanie: od fundamentów, przez leniwe obliczenia, aż po sposób, w jaki Haskell godzi czystość z praktyczną potrzebą efektów, opierając się na hierarchii abstrakcji (funktory, aplikatywy, monady). Przydaje się to szczególnie, gdy chcesz pisać kod ,,po haskellowemu", a nie tylko tłumaczyć na Haskell nawyki z innych języków.
Z drugiej strony, gdy już znasz podstawy i zaczynasz budować większe programy, rośnie apetyt na konkret: jak modelować stan, jak organizować kod, jak dobierać narzędzia typów do problemu. Wtedy dobrze działa podejście przepisowe, jak w Haskell Cookbook. Build functional applications using Monads, Applicatives, and Functors Yogesha Sajanikara, gdzie pojawiają się m.in. transformatory, GADT, rodziny typów czy praca z ,,głębokimi" strukturami danych. To są tematy, które realnie przyspieszają w projektach, gdy trzeba utrzymać porządek w typach i zależnościach, a nie tylko ,,żeby działało".
Gdzie Haskell procentuje: testy własności, DSL-e i ścieżki zawodowe
W pewnym momencie można się zastanawiać, co dalej poza samą nauką składni -- i tu Haskell często wygrywa jako narzędzie do myślenia o jakości. Książki z tej półki zahaczają o podejścia przydatne w pracy: projektowanie małych języków dziedzinowych do rozwiązywania konkretnych problemów (np. parsowania) czy testowanie oparte na własnościach, które lepiej ,,przeszukuje" przestrzeń przypadków niż ręczne przykłady. To otwiera różne perspektywy: od roli developera w zespołach lubiących silne typowanie, przez backend i przetwarzanie danych, aż po miejsca, gdzie liczy się niezawodność i formalna precyzja (finanse, narzędzia, automatyzacja).
Jeśli po drodze masz ochotę zmienić klimat i zobaczyć inny funkcyjny ekosystem, zajrzyj też do podkategorii Elixir w księgarni.