Ini adalah yang contoh yang meyakinkan saya untuk belajar Haskell (dan anak saya senang saya lakukan).
-- program to copy a file --
import System.Environment
main = do
--read command-line arguments
[file1, file2] <- getArgs
--copy file contents
str <- readFile file1
writeFile file2 str
Oke, ini adalah program yang pendek dan dapat dibaca. Dalam hal ini lebih baik daripada program C. Tetapi apa bedanya dengan (katakanlah) program Python dengan struktur yang sangat mirip?
Jawabannya adalah evaluasi malas. Di sebagian besar bahasa (bahkan beberapa yang fungsional), program yang terstruktur seperti di atas akan mengakibatkan seluruh file dimuat ke memori, dan kemudian ditulis lagi dengan nama baru.
Haskell itu "malas". Itu tidak menghitung sesuatu sampai dibutuhkan, dan dengan ekstensi tidak menghitung hal-hal yang tidak pernah dibutuhkannya. Misalnya, jika Anda menghapus writeFile
baris, Haskell tidak akan repot-repot membaca apa pun dari file tersebut.
Karena itu, Haskell menyadari bahwa file writeFile
bergantung pada readFile
, dan karenanya mampu mengoptimalkan jalur data ini.
Meskipun hasilnya bergantung pada kompiler, yang biasanya akan terjadi saat Anda menjalankan program di atas adalah ini: program membaca blok (katakanlah 8KB) dari file pertama, lalu menulisnya ke file kedua, lalu membaca blok lain dari yang pertama file, dan menulisnya ke file kedua, dan seterusnya. (Coba laristrace
di atasnya!)
... yang terlihat sangat mirip dengan implementasi C efisien dari salinan file yang akan dilakukan.
Jadi, Haskell memungkinkan Anda menulis program yang ringkas dan dapat dibaca - seringkali tanpa mengorbankan banyak kinerja.
Hal lain yang harus saya tambahkan adalah bahwa Haskell mempersulit penulisan program buggy. Sistem tipe yang luar biasa, kurangnya efek samping, dan tentu saja kekompakan kode Haskell mengurangi bug setidaknya untuk tiga alasan:
Desain program yang lebih baik. Kompleksitas yang berkurang menyebabkan lebih sedikit kesalahan logika.
Kode kompak. Lebih sedikit baris untuk bug berada.
Mengompilasi kesalahan. Banyak bug yang bukan Haskell yang valid .
Haskell bukan untuk semua orang. Tetapi setiap orang harus mencobanya.