Ada banyak idiom fungsional: monad, aplikatif, panah, dll. Mereka didokumentasikan dalam artikel yang berbeda tetapi sayangnya saya tidak tahu buku atau artikel mana pun yang diringkas di satu tempat (ada Typeclassopedia tetapi memiliki banyak area yang tidak tercakup dengan baik). Adakah yang bisa merekomendasikan artikel / buku yang mencakup mereka dengan baik di satu tempat dan yang dapat diakses oleh programmer dengan keterampilan menengah di FP?
scala
haskell
functional-programming
monads
Konstantin Solomatov
sumber
sumber
Jawaban:
Saran saya, jika Anda ingin belajar Scala, bacalah buku dari Paul Chiusano dan Runar Bjarnason:
http://manning.com/bjarnason/
Bagian II: Desain fungsional dan perpustakaan kombinator
Bagian III: Pola desain fungsional
Bagian IV: Melanggar aturan: efek dan I / O
sumber
Maaf, saya tidak tahu artikel atau buku yang membahas secara rinci perbedaan penggunaan untuk semua konstruksi tersebut, tetapi saya dapat memberi Anda beberapa tautan ke sumber daya individu.
Pola yang cukup umum adalah membangun trafo monad daripada monad sederhana (lihat juga tautan di paragraf berikutnya). Ini pada dasarnya berarti Anda membangun sesuatu yang harus dikombinasikan dengan monad lain, menghasilkan monad yang lebih kompleks yang mampu menangani fitur keduanya.
Di Real World Haskell ada beberapa bab tentang monad. Pada Bab 14. Monads penulis menjelaskan dasar-dasar dan beberapa penggunaan umum (mungkin, daftar, status). Bab 15. Pemrograman dengan monad memberikan lebih banyak penjelasan tentang bagaimana menggunakannya secara efektif (ini mencakup pembaca monad juga). Bab berikut menjelaskan cara menggunakan Parsec , tetapi mungkin lebih menarik untuk mencari artikel yang membahas cara kerjanya: ini harus menjadi contoh yang sangat baik dari penggunaan monad yang terorganisir dengan baik untuk penguraian. Fianlly, Bab 18. Transformator monadmemperkenalkan cara kerja trafo monad dan kemudian menunjukkan cara membuatnya, selangkah demi selangkah. Pertimbangan terhadap bagian terakhir dari bab ini juga menarik.
Saya pernah membaca pertanyaan yang sangat menarik tentang SO tentang penggunaan kreatif monad . Tautan yang diusulkan adalah bacaan yang luar biasa tentang topik tersebut. Dengan semangat itu, saya mencoba menanyakan hal yang sama untuk panah : Saya pasti mendapat jawaban yang lebih sedikit daripada yang ada di monad, tapi tetap saja yang menarik.
Sehubungan dengan pola OOP oleh kelompok berempat, ada satu set bagus dari 3 artikel oleh IBM tentang topik dalam seri pemikiran fungsional mereka . Bahasa fungsional target adalah Scala. Mereka melanjutkan dengan menjelaskan pola desain biasa di OOP dan menunjukkan bagaimana mereka memetakannya ke dalam Scala.
Artikel yang paling relevan dengan pertanyaan Anda pasti yang pertama, tapi dua lainnya mungkin bacaan terkait yang menarik.
sumber
Jeremy Gibbons memiliki blog Patterns in FP yang pada akhirnya ditakdirkan untuk menjadi buku yang Anda minta. Tentu saja, itu belum dalam kondisi berguna seperti yang mungkin Anda inginkan sekarang, tetapi dia layak mendapatkan dorongan!
Sementara itu, saya akan mengatakan +1 untuk Typeclassopedia Brent Yorgey. Ini sangat berguna, dan jika nanti ada bagian yang membingungkan, situs ini adalah tempat yang baik untuk membukanya. Saya tahu Brent terus mengkaji. Jika dia tidak menjangkau pembacanya, beri dia bantuan.
sumber
Banyak hal FP dipublikasikan di situs Oleg: http://okmij.org/ftp/
Presentasi tentang pola FP dari Josh Suereth: http://jsuereth.com/intro-to-fp/
sumber
Sudahkah Anda membaca bab-bab selanjutnya dari Learn You a Haskell for Great Good ?
Bab 6 mencakup peta dan lipatan, yang merupakan dua "pola desain" yang lebih penting dalam bahasa fungsional.
Bab 11-13 mencakup Functor, Functor Aplikatif, dan Monad, dalam urutan itu. Ini berguna - banyak tutorial memperkenalkan Functors dan kemudian Monads, dan kemudian membahas Functor Aplikatif di akhir (jika mereka membahasnya sama sekali). Urutan di LYAH lebih baik, karena bergerak dari Functor => Functor Aplikatif => Monads memindahkan Anda secara bertahap ke atas tangga umum dan kekuasaan.
Bab 14 mencakup Zippers - Anda dapat secara efektif menganggap ini sebagai kelas kontainer dengan penunjuk ke bagian data tertentu, yang berarti Anda mendapatkan akses O (1) dan memperbarui di lokasi penunjuk.
Itu tidak mencakup Panah atau Komonad, yang merupakan topik lanjutan di Haskell. Untuk memahami bagaimana dan mengapa menggunakan Arrows atau Comonads, Anda pasti sudah memiliki pemahaman yang kuat tentang Monads, jadi menurut saya ini bukan masalah - LYAH dengan tegas ditujukan untuk pemula di pasar Haskell.
sumber