Menelusuri asal-usul Haskell dari nama yang diambil dari logician Haskell Curry, komite riset 1987 yang merancang standar lazy functional language, hingga standar Haskell 98 dan 2010, serta memahami mengapa kombinasi purely functional, lazy evaluation, type inference dan typeclass menjadikannya pilihan untuk correctness-critical software.

Setelah di episode 0 kita menyiapkan environment — memastikan GHC 9.14.1 LTS, cabal, dan HLS terinstall — pada episode ini kita menarik napas sejenak dari hands-on dan memahami mengapa Haskell ada. Sejarah sebuah bahasa mungkin terasa tidak penting, padahal justru di sanalah letak alasan mengapa desainnya seperti sekarang.
Mengapa harus memahami sejarah Haskell? Karena Haskell tidak lahir dari lab korporasi, melainkan dari riset akademik yang serius tentang cara menulis program yang bisa dibuktikan benar. Keputusan-keputusan desainnya — tidak ada side effect di kode pure, evaluasi lazy, tipe yang sangat ekspresif — bukan kebetulan, melainkan jawaban atas pertanyaan "bagaimana kita bisa mempercayai kode?" Memahami latar belakang ini akan menjelaskan mengapa Haskell terasa berbeda, dan mengapa perbedaan itu justru keunggulannya.
Haskell dinamai dari Haskell Curry — seorang logician (ahli logika) Amerika yang karya-karyanya tentang combinatory logic menjadi fondasi teoretis komputasi. Dua konsep yang ia kembangkan dipakai luas di dunia programming: currying (mengubah fungsi ber-parameter banyak menjadi rantai fungsi satu parameter) dan combinators. Ironisnya, Curry tidak pernah menulis bahasa Haskell — namanya diabadikan karena kontribusinya di landasan teori komputasi.
| Fakta | Detail |
|---|---|
| Asal nama | Haskell Curry (logician, 1900-1982) |
| Asal usul | Komite riset internasional, 1987 |
| Tujuan awal | Menyatukan riset lazy functional language |
| Standar | Haskell 98, lalu Haskell 2010 |
| Implementasi utama | GHC (Glasgow Haskell Compiler) |
Pada 1987, sekelompok peneliti di bidang functional programming berkumpul dan menemukan masalah: ada lebih dari selusin bahasa lazy functional yang masing-masing eksperimental dan tidak kompatibel. Di conference on Functional Programming Languages and Computer Architecture, mereka memutuskan membentuk komite untuk merancang satu bahasa standar — gabungan terbaik dari riset mereka.
Hasilnya adalah Haskell, bahasa lazy functional pertama yang benar-benar distandarkan. Pada 1999 komite merilis Haskell 98 — standar stabil pertama yang menjadi dasar bagi hampir semua implementasi. Haskell 2010 menyusul dengan penyempurnaan kecil. Sejak saat itu, bahasa ini tidak banyak berubah di level standar; inovasi justru terjadi di level ekstensi GHC, yang akan kita bahas di episode 20.
Di Haskell, fungsi secara default murni: tidak membaca file, tidak menulis ke layar, tidak mengubah variabel global. Konsekuensinya luar biasa: kode pure deterministik (hasil sama untuk input sama), mudah diuji, dan bisa diparalelkan tanpa race condition. Efek samping (I/O, mutable state) diisolasi lewat mekanisme monad IO yang akan kita bedah di episode 11 — dunia luar "dikurung" di satu gerbang, bukan tersebar di seluruh program.
Haskell mengevaluasi ekspresi hanya saat hasilnya benar-benar dibutuhkan. Ini memungkinkan hal yang mustahil di bahasa eager seperti Python atau C: infinite list seperti [1..] bisa dibuat dan dikonsumsi hanya sebagian:
firstTen = take 10 [1..]take 10 [1..] meminta 10 elemen pertama dari daftar tak hingga — dan Haskell hanya menghitung 10 angka itu. Detail dan implikasinya (termasuk space leak) kita bahas di episode 7 dan 21.
Haskell punya tipe statis yang sangat kuat, tetapi tidak menuntut kalian menulis tipe di setiap tempat: compiler bisa menebak tipe lewat algoritma Hindley-Milner. Contohnya, fungsi berikut tidak menyebutkan tipe sama sekali:
double x = x * 2Cek di GHCi dengan :t double dan compiler akan menjawab double :: Num a => a -> a. Banyak bugs kelas "typo yang baru ketahuan di production" tertangkap saat kompilasi — bukan saat runtime.
Typeclass adalah cara Haskell mengimplementasikan overloading — satu fungsi bekerja untuk banyak tipe. Contoh paling kentara adalah operator == yang bekerja untuk Int, String, Bool, sampai tipe buatan sendiri:
same :: Eq a => a -> a -> Bool
same x y = x == yBagian ini akan kita pelajari penuh di episode 8, termasuk membangun typeclass sendiri dan hubungannya dengan Functor, Applicative, dan Monad.
| Domain | Contoh Penggunaan |
|---|---|
| Blockchain | Cardano — platform smart contract ditulis besar-besaran dalam Haskell |
| Security/Formal methods | Galois — tool untuk software verification dan crypto |
| Tooling FP | FP Complete — Stack dan komersialisasi toolchain Haskell |
| Kompilator | GHC itu sendiri, dan banyak compiler DSL lain |
| Riset | Standard reference untuk functional programming |
Menariknya, alasan utama perusahaan memakai Haskell sering sama: bukan kecepatan menulisnya, melainkan kepercayaan terhadap hasilnya. Di domain yang kegagalan software berbiaya mahal — smart contract, protokol kripto, verifikasi — compiler yang menangkap error di awal adalah fitur yang paling berharga.
Note
Haskell bukan bahasa yang "paling cepat", "paling populer", atau "paling mudah". Kekuatannya adalah correctness: ketika ia terkompilasi, kemungkinan besar logikanya benar karena compiler memeriksa begitu banyak hal. Inilah sudut pandang yang membedakannya dari hampir semua bahasa mainstream.
| Tahun | Tonggak |
|---|---|
| 1987 | Komite riset internasional membentuk standar lazy functional language |
| 1990 | Rilis pertama Haskell (versi 1.0) |
| 1999 | Haskell 98 — standar stabil pertama |
| 2010 | Haskell 2010 — standar bahasa saat ini |
| 2025-12-19 | GHC 9.14.1 — rilis pertama berstatus LTS (dukungan minimal 2 tahun) |
| 2026-03-27 | GHC 9.12.4 — jalur stabil saat ini |
Pada episode 1 ini, kalian telah menelusuri perjalanan Haskell dari proyek riset 1987 hingga bahasa functional paling berpengaruh di dunia.
Inti yang harus dibawa pulang:
Di episode 2 selanjutnya, kita akan membedah konsep dasar dan arsitektur utama Haskell — cara kerja kompilasi GHC menjadi native code (termasuk backend LLVM dan WASM), peran GHCi sebagai REPL, serta komponen-komponen ekosistem: ghc, ghci, runghc, cabal, stack, HLS, dan Prelude. Sampai jumpa di episode 2!