Salah satu inovasi utama dalam FP yang menghasilkan "ledakan" minat adalah monad.
Pada Januari 1992, Philip Wadler menulis sebuah makalah berjudul The Essence of Functional Programming yang memperkenalkan monads ke dalam pemrograman fungsional sebagai cara untuk berurusan dengan IO.
Masalah utama dengan bahasa pemrograman murni, malas, fungsional adalah utilitas dalam berurusan dengan IO. Ini adalah salah satu anggota "Awkward Squad" dalam pemrograman, karena "kemalasan dan efek samping, dari sudut pandang praktis, tidak sesuai. Jika Anda ingin menggunakan bahasa malas, itu haruslah bahasa murni fungsional; jika Anda ingin menggunakan efek samping, Anda sebaiknya menggunakan bahasa yang ketat. " Referensi
Masalah dengan IO sebelum monad adalah bahwa menjaga kemurnian tidak dimungkinkan untuk program yang sebenarnya berguna untuk apa pun. Dengan IO, kami berarti segala sesuatu yang berhubungan dengan perubahan status, termasuk mendapatkan input dan output dari pengguna atau lingkungan. Dalam pemrograman fungsional murni, semuanya tidak berubah, untuk memungkinkan kemalasan dan kemurnian (bebas dari efek samping).
Bagaimana monad memecahkan masalah IO? Nah, tanpa membahas terlalu banyak monads, mereka pada dasarnya mengambil "Dunia" (lingkungan runtime) sebagai input ke monad, dan menghasilkan "Dunia" baru sebagai output, dan hasilnya: ketik IO a = World -> (a, Dunia).
Oleh karena itu FP telah semakin masuk ke arus utama, karena masalah terbesar, IO (dan lainnya) telah diselesaikan. Integrasi ke dalam bahasa OO yang ada juga telah terjadi, seperti yang Anda tahu. LINQ adalah monads, misalnya, melalui dan melalui.
Untuk informasi lebih lanjut, saya sarankan membaca tentang monad dan makalah yang dirujuk dalam jawaban saya.