Menuntun instalasi toolchain Haskell lewat GHCup beserta verifikasi versi GHC dan cabal, lalu menulis dan menjalankan program pertama main dengan putStrLn, baik langsung via runghc, di GHCi, maupun lewat proyek cabal yang diinisialisasi dengan cabal init.

Setelah di episode 2 kita memahami arsitektur toolchain — rantai kompilasi GHC dan peran setiap komponen — saatnya turun tangan: memasang toolchain dengan benar dan menulis program Haskell pertama. Episode ini adalah gerbangnya: jika instalasi beres dan hello world berjalan, seluruh series bisa diikuti tanpa hambatan teknis.
Mengapa episode ini penting? Karena sebagian besar kesulitan pemula Haskell bukan di bahasa itu sendiri, melainkan di setup toolchain yang kurang tepat. Compiler yang versinya bentrok dengan HLS, cabal yang tidak menemukan GHC, atau PATH yang belum diatur — semua berujung pada frustrasi yang sebenarnya bisa dicegah dengan install yang benar sejak awal.
GHCup adalah installer toolchain standar Haskell. Ia mengelola GHC, cabal, stack, dan HLS dalam satu alat. Install dengan satu perintah:
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | shInstaller akan bertanya beberapa hal (mode pre-configured PATH, dukungan haskell-language-server, dan lain-lain). Disarankan menjawab ya untuk konfigurasi otomatis PATH agar ghcup, ghc, dan cabal langsung tersedia. Setelah selesai, tutup dan buka lagi terminal (atau jalankan source ~/.bashrc sesuai prompt) agar perubahan PATH aktif.
Series ini memakai GHC 9.14.1 — rilis 19 Desember 2025, versi pertama berstatus LTS dengan dukungan minimal dua tahun. Install GHC dan cabal versi recommended:
ghcup install ghc recommended
ghcup install cabal recommended
ghcup set ghc recommendedghcup set ghc recommended menjadikan GHC tersebut default untuk seluruh sesi. Jika kalian butuh versi lain di proyek berbeda, ghcup set bisa berpindah kapan saja — inilah keunggulan GHCup dibanding install compiler manual.
GHCup punya antarmuka interaktif bernama ghcup tui untuk melihat dan mengelola semua versi yang terinstall:
ghcup tuiDi sini kalian bisa melihat status GHC, cabal, stack, dan HLS, menandai versi yang aktif (tagged), menginstall versi baru, dan menghapus versi lama. Untuk verifikasi cepat tanpa TUI, ghcup list menampilkan semua versi yang tersedia.
Sebelum menulis kode, pastikan semuanya terpasang dengan benar:
ghc --version
cabal --version
ghcup listghc --version harus mencetak versi 9.14.1, dan cabal --version mencetak versi cabal terbaru (biasanya 3.12.x). Jika ghc tidak ditemukan, cek apakah ~/.ghcup/bin ada di PATH:
echo $PATH
ls ~/.ghcup/binBuat direktori lab dan file pertama kalian:
mkdir -p ~/haskell-lab && cd ~/haskell-labLalu tulis program paling sederhana:
main :: IO ()
main = putStrLn "Hello, Haskell!"main :: IO () adalah tipe signature: main adalah aksi IO yang menghasilkan nilai (). putStrLn "Hello, Haskell!" adalah aksi yang mencetak string diikuti baris baru. Di Haskell, mencetak ke layar adalah efek samping, jadi ia harus hidup di dalam monad IO — detail penuhnya di episode 11.
runghc Main.hsrunghc menafsirkan file tanpa menghasilkan binary — cara tercepat untuk mencoba file kecil dan script. Cocok untuk praktik di series ini.
ghc -O2 -o hello Main.hs
./helloIni menghasilkan binary native hello. Untuk program sederhana seperti ini, perbedaan kecepatan eksekusi tidak terasa, tapi binary hasil kompilasi penting saat kita masuk ke produksi.
$ ghci Main.hs
ghci> main
Hello, Haskell!
ghci> :quit
Leaving GHCi.Memuat Main.hs ke GHCi lalu memanggil main — mode ini berguna saat kalian ingin bermain-main dengan fungsi lain di file yang sama.
Tip
Selama dua fase awal series (episode 3-8), runghc dan GHCi adalah teman terbaik kalian: cepat, tanpa build step, dan langsung memberi umpan balik. Kita baru benar-benar beralih ke proyek cabal di episode 9.
Untuk struktur proyek yang rapi, inisialisasi proyek cabal:
cd ~/haskell-lab
cabal init --interactivecabal init --interactive akan bertanya nama paket, versi, dan lain-lain; untuk cepat, gunakan --non-interactive dengan nama paket:
cabal init --non-interactive --name=hello-labIni menghasilkan struktur:
hello-lab/
hello-lab.cabal
app/
Main.hs
CHANGELOG.mdJalankan dengan:
cd hello-lab
cabal build
cabal runcabal build mengkompilasi paket, dan cabal run menjalankan executable utama. Output-nya harus mencetak Hello, Haskell!. Sepanjang series, cabal run akan menjadi cara utama kita menjalankan contoh yang lebih besar.
Warning
Jika cabal build mengunduh banyak paket di percobaan pertama, itu normal — cabal sedang mengunduh index Hackage dan dependensi. Pastikan jaringan stabil, karena putus di tengah unduhan adalah satu-satunya penyebab umum kegagalan di langkah ini.
Yang sudah kalian lakukan di episode 3:
PATH dikonfigurasi otomatis.ghc --version dan cabal --version.runghc, ghc -O2, dan GHCi.hello-lab) dibuat dan berhasil di-build dan di-run.Inti yang harus dibawa pulang:
ghc --version (9.14.1) dan cabal --version sebelum menulis kode.main :: IO () dengan putStrLn di dalamnya.runghc (cepat), ghc -O2 (binary), dan GHCi (interaktif).Di episode 4 selanjutnya kita akan membahas sintaks dasar Haskell: definisi dan fungsi — cara mendefinisikan fungsi dengan pola argumen, guards untuk percabangan, binding where dan let, serta aturan layout berbasis indentasi yang menggantikan kurung kurawal. Pastikan runghc kalian berfungsi, karena mulai episode ini kita akan banyak mengetik kode!