W rozdziale 19 Real World Haskell wiele przykładów zawodzi teraz z powodu zmiany Control.Exception
.
To sprawia, że myślę, że może niektóre rzeczy w tej książce są przestarzałe i nie warto ich już studiować, w końcu minęło już 6 lat. Moje jedyne inne odniesienie to Learn You a Haskell For Great Good , choć jest to świetna książka, jest o wiele bardziej podstawowa w porównaniu z RWH.
Czy ktoś, kto przeczytał książkę wcześniej, może udzielić porady, które jej części nie są już aktualne? Zwłaszcza rozdziały drugiej połowy książki, na przykład pamięć transakcyjna oprogramowania, programowanie współbieżne, programowanie gniazd itp.
EDYCJA: Chodzi o wydanie książki opublikowanej w grudniu 2008 r., Która jest jedynym znanym wydaniem na dzień dzisiejszy (listopad 2017)
źródło
Monad
są podklasąApplicative
.Odpowiedzi:
Główny numer RWH
To jest stare. RWH został napisany w czasie, gdy używana była wersja 6.8 GHC. 6.8 korzystał z wersji podstawowej 3.0.xx 6.10.1 już używanej 4.0.0.0, co wprowadziło wiele zmian . A to tylko skok z 6,8 do 6,10. Aktualna wersja GHC to 7.10. Monady zostały zmienione. Jest obecnie dyskusja w celu usunięcia
return
zMonad
, więcMonad
instancja w Real World Haskell naprawdę będzie zsynchronizowany z prawdziwego świata.Mimo to jest to nadal przydatne źródło ogólnych wskazówek. Należy jednak pamiętać, że wiele bibliotek zmieniło się od czasu jego wydania.
Coś, co możesz przeczytać podczas czytania RWH, to „What I Wish I Knew When Learning Haskell” Stephena Diehla . Zapewnia dodatkowe informacje, ale pamiętaj, że niektóre sekcje nie są przyjazne dla nowicjuszy.
Uwagi ogólne
Uwagi do rozdziałów
To tylko krótki przegląd niektórych rzeczy, które zauważyłem podczas czytania RWH. Prawdopodobnie jest niekompletny.
Rozdział 2. Typy i funkcje a FTP
Od GHC 7.10 .
Typ
null
został zmieniony z powodu propozycji Foldable-Traversable-Propozycja . Wiele innych funkcji, takich jakfoldr
,foldl
i wiele innych, które zostały wcześniej zdefiniowane tylko dla[a]
wPrelude
zostały zastąpione bardziej ogólnegoFoldable t => t a
wariantów.Rozdział 11. Testowanie i zapewnienie jakości
Od platformy Haskell 2010 lub pod koniec 2008 roku.
Chociaż wspomniano o tym w przypisie , biblioteka QuickCheck zmieniła się pod wieloma względami z wersji 1 do wersji 2. Na przykład
generate
teraz używaGen a
zamiastStdGen
, a funkcjonalność starejgenerate
jest wTest.QuickCheck.Gen.unGen
.W razie wątpliwości sprawdź dokumentację .
Rozdział 14. Monady i rozdział 15. Programowanie z monadami
Łamanie kodu:
Applicative m => Monad m
Od wersji GHC 7.10
Applicative
jest teraz nadklasąMonad
czegoś, co nie było planowane w 2007 roku.Zobacz uwagi do wydania 7.8.1 .
W
State
/Writer
/Reader
monadyW Czy monada z prawdziwego stanu może wstać? - twierdzą autorzy
To już nie prawda, ponieważ
State
i jego przyjaciele są teraz zaimplementowani za pośrednictwemSą więc zdefiniowane przez transformator monadowy.
Rozdział 17. Współpraca z C: FFI
Cały rozdział jest w porządku, ale jak można przeczytać w komentarzach lub na blogu Yurasa Shumovicha , finalizująca część w poniższym kodzie jest złą praktyką:
Podobnie jak w
malloc()
przypadkufree()
,new
withdelete
,allocate
withdeallocate
, należy zawsze używać poprawnej funkcji.Jeśli obca funkcja alokuje pamięć, należy również użyć towarzyszącej funkcji zwalniania.
Rozdział 19. Obsługa błędów
Obsługa błędów zmieniła się całkowicie z 6.8 na 6.10, ale już to zauważyłeś. Lepiej przeczytaj dokumentację .
Rozdział 22. Rozszerzony przykład: programowanie klienta WWW
Niektóre przykłady wydają się być zepsute. Dostępne są również inne biblioteki HTTP.
Rozdział 25. Profilowanie i optymalizacja
Ogólne techniki profilowania są nadal takie same, a przykład (patrz poniżej) jest świetnym studium przypadku problemów, które mogą wystąpić w Twoim programie. Ale w RWH brakuje profilowania wielowątkowego, np. Przez ThreadScope. O ile wiem, leniwe IO nie dotyczy całej książki.
Rozdział 24 i Rozdział 28 (Programowanie współbieżne i równoległe oraz STM)
Podczas gdy Rozdział 24. Programowanie współbieżne i wielordzeniowe oraz Rozdział 28. Pamięć transakcyjna oprogramowania są nadal aktualne, książka Simona Marlowa Parallel and Concurrent Programming in Haskell skupia się wyłącznie na programowaniu współbieżnym i równoległym i jest całkiem nowa (2013). W RWH całkowicie brakuje programowania i naprawy GPU.
Rozdział 26. Zaawansowany projekt biblioteki: budowanie filtra Blooma
Podobnie jak w przypadku innych rozdziałów, ogólne wytyczne dotyczące biblioteki projektów są nadal dobrze napisane i aktualne. Jednak ze względu na pewne zmiany (?) Dotyczące
ST
wyników nie można już skompilować.Rozdział 27. Programowanie sieciowe
Wciąż jest w większości aktualny. W końcu programowanie sieciowe nie zmienia się tak łatwo. Jednak kod używa przestarzałych funkcji
bindSocket
isClose
, które powinny zostać zastąpione przezbind
iclose
(najlepiej za pośrednictwem kwalifikowanego importu). Pamiętaj, że jest to bardzo niski poziom, możesz chcieć użyć bardziej wyspecjalizowanej biblioteki wysokiego poziomu.Dodatek A. Instalowanie bibliotek GHC i Haskell
GHC 6.8 było ostatnią wersją przed wprowadzeniem platformy Haskell. Dlatego dodatek mówi, aby ręcznie uzyskać GHC i Cabal. Nie. Zamiast tego postępuj zgodnie z instrukcjami na stronie pobierania haskell.org .
Dodatek nie mówi również o piaskownicach Cabal, które zostały wprowadzone w wersji Cabal 1.18 i uwolnią Cię od piekła zależności . I oczywiście
stack
całkowicie go brakuje.Brakująca treść
Niektóre tematy nie są w ogóle poruszane w RWH. Obejmuje to biblioteki strumieniowe, takie jak rury i kanały , a także soczewki .
Istnieje kilka zasobów dotyczących tych tematów, ale poniżej znajdują się łącza do wstępów, które pomogą Ci zorientować się, czego dotyczą. Ponadto, jeśli chcesz używać wektorów, użyj
vectors
pakietu.Control.Applicative
RWH zastosowania
Control.Applicative
„s(<$>)
na kilka punktów, ale nie wyjaśniaControl.Applicative
wcale. LYAH i Typeklasopedia zawierają sekcje dotycząceApplicative
. Biorąc pod uwagę, żeApplicative
jest to nadklasaMonad
(patrz wyżej), zaleca się nauczenie tej klasy na pamięć.Ponadto kilku operatorów
Control.Applicative
(i sama typeclass) są teraz częściąPrelude
, więc upewnij się, że operatorzy nie kolidować z<$>
,<*>
i innych.Soczewki
lens
)Biblioteki strumieniowe
conduit
)pipes
, dołączony dopipes
pakietu)Obróbka
stack
, wieloplatformowy program do tworzenia projektów Haskellghc-mod
, zaplecze dla vim, emacs, Sublime Text i innych edytorówNowe / brakujące rozszerzenia językowe i zmiany w GHC
:i ($)
ogromnie się zmienił)-XTypeInType
-XDataKinds
-XGADT
-XRankNTypes
-XGenericNewtypeDeriving
-XDeriveFunctor
źródło