Di Bab 19 Dunia Nyata Haskell banyak contoh yang sekarang gagal karena perubahan Control.Exception
.
Itu membuat saya berpikir mungkin beberapa hal di buku ini sebenarnya sudah usang dan tidak layak untuk dipelajari lagi, apalagi sudah 6 tahun. Satu-satunya referensi saya yang lain adalah Learn You a Haskell For Great Good , meskipun ini adalah buku yang bagus, itu jauh lebih mendasar dibandingkan dengan RWH.
Adakah yang bisa membaca buku ini sebelumnya, tolong beri beberapa saran tentang bagian mana yang tidak lagi relevan? Terutama bab-bab di paruh kedua buku, misalnya, memori transaksional perangkat lunak, pemrograman bersamaan, pemrograman soket, dll.
EDIT: Ini tentang edisi buku yang diterbitkan pada Desember 2008, yang merupakan satu-satunya edisi yang diketahui hingga hari ini (Nov 2017)
sumber
Monad
adalah subclass dariApplicative
.Jawaban:
Masalah utama RWH
Sudah tua. RWH ditulis pada saat GHC versi 6.8 sedang digunakan. 6.8 menggunakan versi dasar 3.0.xx 6.10.1 sudah menggunakan 4.0.0.0, yang memperkenalkan banyak perubahan . Dan itu hanya lompatan dari 6,8 menjadi 6,10. Versi GHC saat ini adalah 7.10. Monad telah diubah. Ada saat diskusi untuk menghapus
return
dariMonad
, sehinggaMonad
misalnya di Real World Haskell akan benar-benar menjadi tidak sinkron dengan dunia nyata.Meskipun demikian, ini masih merupakan sumber yang berguna untuk pedoman umum. Namun perlu diingat bahwa banyak pustaka berubah sejak dirilis.
Sesuatu yang dapat Anda baca sambil membaca RWH adalah "Apa yang Saya Ingin Saya Ketahui Saat Belajar Haskell" oleh Stephen Diehl . Ini memberikan wawasan tambahan, tetapi perlu diketahui, beberapa bagian tidak benar-benar ramah pendatang baru.
Ucapan umum
Komentar untuk bab
Ini hanyalah gambaran singkat dari beberapa hal yang saya perhatikan saat membaca RWH. Ini mungkin tidak lengkap.
Bab 2. Jenis dan Fungsi vs FTP
Sejak GHC 7.10 .
Jenis
null
telah diubah karena Foldable-Traversable-Proposal . Banyak fungsi lain sepertifoldr
,foldl
dan banyak fungsi lain yang sebelumnya hanya ditetapkan[a]
di dalamPrelude
telah diganti denganFoldable t => t a
varian yang lebih umum .Bab 11. Pengujian dan jaminan kualitas
Sejak Haskell-platform 2010 atau akhir 2008.
Meskipun ini disebutkan dalam catatan kaki , pustaka QuickCheck telah berubah dalam banyak hal dari versi 1 ke versi 2. Misalnya,
generate
sekarang menggunakanGen a
alih-alihStdGen
, dan fungsionalitas yang lamagenerate
ada diTest.QuickCheck.Gen.unGen
.Jika ragu, periksa dokumentasinya .
Bab 14. Monads & Bab 15. Pemrograman dengan monads
Pemecahan kode:
Applicative m => Monad m
Pada GHC 7.10,
Applicative
sekarang menjadi superclassMonad
, sesuatu yang tidak direncanakan pada tahun 2007.Lihat 7.8.1 catatan rilis .
The
State
/Writer
/Reader
monadDalam Will keadaan sesungguhnya monad silakan berdiri? bagian, klaim penulis
Itu tidak benar lagi, karena
State
dan teman-temannya sekarang diimplementasikan melaluiJadi mereka ditentukan oleh trafo monad mereka.
Bab 17. Berinteraksi dengan C: FFI
Bab keseluruhan baik-baik saja, tetapi seperti yang dapat dibaca di komentar atau di blog Yuras Shumovich , bagian finalisator dalam kode berikut adalah praktik yang buruk:
Sebagaimana
malloc()
harus digunakan denganfree()
,new
dengandelete
,allocate
dengandeallocate
, seseorang harus selalu menggunakan fungsi yang benar.Jika fungsi asing mengalokasikan memori, Anda juga harus menggunakan fungsi deallocation yang menyertainya.
Bab 19. Penanganan kesalahan
Penanganan kesalahan berubah total dari 6,8 menjadi 6,10, tetapi Anda sudah menyadarinya. Lebih baik baca dokumentasinya .
Bab 22. Contoh Tambahan: Pemrograman Klien Web
Beberapa contoh tampaknya rusak. Juga, ada pustaka HTTP lain yang tersedia.
Bab 25. Profil dan optimasi
Teknik pembuatan profil umum masih sama, dan contohnya (lihat di bawah) adalah studi kasus yang bagus untuk masalah yang dapat terjadi dalam program Anda. Tetapi RWH tidak memiliki profil multi-threaded, misalnya melalui ThreadScope. Juga, lazy IO tidak peduli di seluruh buku, sejauh yang saya tahu.
Bab 24 & Bab 28 (Pemrograman bersamaan dan paralel & STM)
Sementara Bab 24. Pemrograman secara bersamaan dan multi inti serta Bab 28. Memori transaksional perangkat lunak masih relevan, buku Simon Marlow Parallel and Concurrent Programming di Haskell hanya berfokus pada pemrograman konkuren dan paralel dan cukup baru (2013). Pemrograman GPU dan repa sama sekali tidak ada di RWH.
Bab 26. Desain perpustakaan tingkat lanjut: membangun filter Bloom
Seperti bab-bab lainnya, pedoman umum perpustakaan desain masih ditulis dengan baik dan relevan. Namun karena adanya beberapa perubahan (?) Yang memprihatinkan
ST
, hasilnya tidak dapat dikompilasi lagi.Bab 27. Pemrograman jaringan
Sebagian besar masih up to date. Bagaimanapun, pemrograman jaringan tidak berubah dengan mudah. Namun, kode tersebut menggunakan fungsi yang tidak digunakan lagi
bindSocket
dansClose
, yang harus diganti olehbind
danclose
(sebaiknya melalui impor yang memenuhi syarat). Ingatlah bahwa ini adalah tingkat yang sangat rendah, Anda mungkin ingin menggunakan perpustakaan tingkat tinggi yang lebih terspesialisasi.Lampiran A. Menginstal pustaka GHC dan Haskell
GHC 6.8 adalah versi terakhir sebelum Platform Haskell diperkenalkan. Oleh karena itu, lampiran memberitahu Anda untuk mendapatkan GHC dan Cabal dengan tangan. Jangan. Sebagai gantinya, ikuti petunjuk di halaman unduh haskell.org .
Selain itu, lampiran tidak memberi tahu Anda tentang kotak pasir Cabal, yang diperkenalkan di Cabal 1.18 dan membebaskan Anda dari neraka ketergantungan . Dan tentu saja,
stack
hilang sama sekali.Konten hilang
Beberapa topik tidak dibahas sama sekali di RWH. Ini termasuk perpustakaan streaming seperti pipa dan saluran , dan juga lensa .
Ada beberapa sumber daya di luar sana untuk topik tersebut, tetapi berikut adalah beberapa tautan ke perkenalan untuk memberi Anda gambaran tentang topik tersebut. Juga, jika Anda ingin menggunakan vektor, gunakan
vectors
paket.Control.Applicative
RWH menggunakan
Control.Applicative
's(<$>)
di beberapa poin, tetapi tidak menjelaskanControl.Applicative
sama sekali. LYAH dan Typeclassopedia berisi bagian tentangApplicative
. Mengingat ituApplicative
adalah kelas superMonad
(lihat di atas), disarankan untuk mempelajari kelas itu dengan hati.Selain itu, beberapa operator
Control.Applicative
(dan kelas tipe itu sendiri) sekarang menjadi bagian dariPrelude
, jadi pastikan bahwa operator Anda tidak bentrok dengan<$>
,<*>
dan lainnya.Lensa
lens
)Perpustakaan streaming
conduit
)pipes
, termasuk dalampipes
paket)Perkakas
stack
, program lintas platform untuk mengembangkan proyek Haskellghc-mod
, backend untuk vim, emacs, Sublime Text, dan editor lainnyaEkstensi bahasa baru / hilang dan perubahan GHC
:i ($)
telah sangat berubah)-XTypeInType
-XDataKinds
-XGADT
-XRankNTypes
-XGenericNewtypeDeriving
-XDeriveFunctor
sumber