Sebelum program Haskell pertama dapat dijalankan, toolchain, yaitu rangkaian alat pengembangan Haskell, harus terpasang terlebih dahulu. Topik ini membahas pemasangan GHCup sebagai pengelola alat, pemasangan GHC dan Cabal melalui GHCup, pemeriksaan hasil pemasangan dengan sebuah program uji, serta konfigurasi editor bersama HLS. Setelah mengikuti topik ini, seluruh alat inti siap digunakan untuk menulis dan menjalankan kode Haskell.
Mengenal GHCup dan alat yang dikelolanya#
GHCup adalah alat pemasang sekaligus pengelola versi (version manager) untuk ekosistem Haskell. Melalui satu antarmuka baris perintah, GHCup memasang, mengganti, dan menghapus beberapa versi alat berikut tanpa saling menimpa. Alat pertama adalah GHC, yaitu compiler yang menerjemahkan kode sumber Haskell menjadi program yang dapat dijalankan. Alat kedua adalah cabal-install, yaitu build tool sekaligus manajer paket yang mengunduh pustaka dan membangun proyek. Alat ketiga adalah HLS, yaitu server bahasa yang menghubungkan editor dengan compiler. Stack tidak wajib pada jalur ini, tetapi ikut dikelola GHCup apabila suatu saat diperlukan.
Kebutuhan pengelola versi muncul karena GHC berkembang cepat. Proyek yang ditulis beberapa tahun lalu mungkin menuntut versi lama, sedangkan proyek baru menggunakan versi terbaru. GHCup membaca metadata resmi yang memuat daftar versi beserta tandanya, misalnya versi yang direkomendasikan (recommended) dan versi terbaru. Rancangan jalur ini menargetkan GHC 9.14, sehingga versi itulah yang dipilih pada contoh pemasangan di topik ini.
Memasang GHCup#
GHCup sendiri dipasang melalui satu skrip resmi yang diunduh dari get-ghcup.haskell.org. Skrip tersebut mendeteksi sistem operasi beserta distribusinya, memeriksa prasyarat seperti curl dan alat build dasar, lalu menempatkan berkas GHCup di dalam direktori beranda pengguna. Perintah berikut dijalankan pada terminal untuk memasangnya.
# tidak-dijalankan
# unduh dan jalankan skrip pemasangan GHCup untuk pengguna saat ini
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | shSelama berjalan, skrip mengajukan beberapa pertanyaan pilihan di terminal, misalnya apakah berkas profil shell perlu disunting agar ~/.local/bin masuk ke PATH. Pilihan bawaan cukup untuk mengikuti jalur ini, yaitu memasang GHCup dan menyiapkan PATH, sedangkan GHC, Cabal, dan HLS dipasang sendiri pada langkah berikutnya. Setelah skrip selesai, tutup lalu buka terminal baru agar PATH yang diperbarui terbaca, kemudian periksa pemasangan dengan ghcup --version, yang mencetak nomor versi GHCup yang terpasang.
Memasang GHC, Cabal, dan HLS#
GHCup yang baru terpasang belum menyertakan GHC. Perintah ghcup install mengunduh dan memasang versi yang direkomendasikan apabila nomor versi tidak disebutkan, sedangkan perintah ghcup set menetapkan versi mana yang dipanggil ketika ghc diketik pada terminal. Cabal dan HLS dipasang dengan pola yang sama, yaitu melalui ghcup install cabal dan ghcup install hls.
# tidak-dijalankan
# pasang GHC versi yang direkomendasikan GHCup
ghcup install ghc
# jadikan GHC yang baru terpasang sebagai versi bawaan
ghcup set ghc
# pasang cabal-install dan HLS
ghcup install cabal
ghcup install hlsDengan pola ini, beberapa versi GHC dapat terpasang berdampingan pada satu mesin. Perintah ghcup list menampilkan daftar versi beserta statusnya, misalnya versi mana yang terpasang dan versi mana yang sedang menjadi bawaan. Apabila suatu proyek menuntut versi tertentu, versi itu cukup dipasang lalu dipilih melalui ghcup set sebelum proyek dibangun.
Memeriksa hasil pemasangan#
Dua perintah berikut memeriksa bahwa GHC dan cabal-install terbaca oleh terminal. Perintah ghc --version mencetak nomor versi compiler yang terpasang, sedangkan cabal --version mencetak nomor versi cabal-install beserta versi pustaka Cabal yang digunakannya. Nomor yang tercetak mengikuti versi yang dipasang pada mesin masing-masing.
# cetak versi GHC yang terpasang
ghc --version
# cetak versi cabal-install yang terpasang
cabal --versionThe Glorious Glasgow Haskell Compilation System, version 9.6.6
cabal-install version 3.16.1.0
compiled using version 3.16.1.0 of the Cabal library (in-tree)Pemeriksaan berikutnya berupa eksekusi program. Berkas berikut memanggil dua fungsi pustaka standar, yaitu sum untuk menjumlahkan deret dan product untuk mengalikan deret, sehingga pustaka standar ikut teruji bersama compiler-nya. Anotasi tipe pada jumlahDeret juga menunjukkan pola yang digunakan di seluruh jalur ini, yaitu definisi fungsi selalu disertai janji tipenya.
-- program uji cepat setelah pemasangan toolchain
jumlahDeret :: Int -> Int
jumlahDeret n = sum [1 .. n]
main :: IO ()
main = do
print (jumlahDeret 100)
print (product [1 .. 10])5050
3628800Program dijalankan melalui runghc uji-toolchain.hs. Perintah runghc menjalankan kode sumber Haskell secara langsung tanpa langkah kompilasi terpisah, sehingga cocok untuk program kecil seperti program uji ini. Apabila kedua angka pada keluaran tercetak, compiler, pustaka standar, dan perintah runghc bekerja sebagaimana mestinya.
Mengonfigurasi editor dengan HLS#
Penulisan kode Haskell jauh lebih terpandu apabila editor terhubung dengan HLS (Haskell Language Server), yaitu server bahasa yang menerapkan Language Server Protocol (LSP), sebuah protokol yang memisahkan analisis kode dari editor. Serverlah yang melakukan analisis kode, sedangkan editor yang menampilkan hasilnya. Dengan pembagian tersebut, editor apa pun yang mendukung LSP memperoleh kemampuan yang sama dari satu server yang dipasang sekali melalui GHCup.
Editor populer menyediakan plugin LSP masing-masing, misalnya ekstensi Haskell untuk Visual Studio Code, nvim-lspconfig untuk Neovim, dan lsp-mode untuk Emacs. Setelah plugin diaktifkan dan HLS terbaca di PATH, fitur yang menyertai pengerjaan kode meliputi pemeriksaan tipe dan peringatan compiler yang tampil saat berkas disunting, pelengkapan otomatis nama fungsi dan tipe, lompat ke definisi (go to definition), serta info tipe saat kursor berada di atas sebuah ekspresi. Pesan error dari compiler juga ditandai langsung pada baris yang bermasalah, sehingga kesalahan tipe terlihat tanpa perlu berpindah ke terminal.
Kesalahan umum#
Pesan command not found setelah pemasangan berarti terminal belum mengenali nama perintah. Penyebabnya hampir selalu berupa PATH yang belum dimuat ulang, karena skrip GHCup menambahkan ~/.local/bin ke berkas profil shell yang baru dibaca pada sesi berikutnya. Perbaikannya dengan menutup lalu membuka terminal baru, atau menjalankan source ~/.bashrc pada terminal yang sama sebelum mencoba lagi.
Kesalahan kedua berupa kegagalan perintah cabal build pada proyek pertama karena indeks paket lokal masih kosong. cabal-install perlu mengunduh daftar paket Hackage sekali sebelum dapat mengunduh dependensi, dan langkah itu dilakukan melalui cabal update. Apabila pesan error menyebut paket tidak ditemukan segera setelah pemasangan, jalankan cabal update terlebih dahulu.
Kesalahan ketiga berupa program yang gagal dibangun setelah GHC diganti melalui ghcup set. Kode yang ditulis untuk versi tertentu bisa saja menggunakan fitur yang belum ada atau sudah dihapus pada versi lain. Apabila kegagalan itu muncul setelah pergantian versi, periksa versi GHC yang sedang digunakan dengan ghc --version, lalu kembalikan versi yang disyaratkan proyek melalui ghcup set.
Ringkasan#
- GHCup memasang dan mengelola versi GHC, cabal-install, Stack, dan HLS di dalam direktori beranda pengguna tanpa hak administrator.
- Perintah
ghcup installmengunduh alat, sedangkanghcup setmenetapkan versi bawaan yang dipanggil terminal. - Pemasangan diverifikasi melalui
ghc --version,cabal --version, dan eksekusi program uji denganrunghc. - HLS menghubungkan editor dengan compiler melalui LSP sehingga pemeriksaan tipe, pelengkapan, dan lompat ke definisi bekerja saat kode disunting.
Referensi#
- GHCup — haskell.org — Panduan resmi GHCup yang memuat skrip pemasangan dan daftar perintah pengelolaan versi.
- Glasgow Haskell Compiler User’s Guide — GHC — Dokumentasi resmi GHC untuk compiler beserta alat pelengkapnya.
- Cabal User Guide — Cabal — Dokumentasi resmi cabal-install untuk pemasangan paket dan pembangunan proyek.
- haskell-language-server — Read the Docs — Dokumentasi resmi HLS beserta panduan pemasangan per editor.