Haskell adalah bahasa pemrograman yang diketik secara statis dan murni fungsional, dikenal karena ekspresivitas dan ketahanannya. Bahasa ini menekankan penggunaan fungsi matematis dan ketidakberubahan, memungkinkan pengembang untuk menulis kode yang ringkas dan lebih jelas. Haskell dirancang untuk memfasilitasi pengembangan aplikasi berskala besar sambil mempertahankan tingkat abstraksi yang tinggi. Bahasa ini sangat cocok untuk tugas-tugas yang melibatkan algoritma kompleks, analisis data, dan pemrograman konkuren karena sistem tipe yang kuat dan evaluasi malasnya.
Haskell diciptakan pada akhir 1980-an sebagai bahasa pemrograman standar dan sumber terbuka untuk menyatukan beberapa bahasa fungsional yang ada, termasuk Miranda dan ML. Bahasa ini dinamai setelah Haskell Curry, seorang matematikawan dan logician yang karyanya tentang logika kombinatorial menjadi dasar bagi pemrograman fungsional.
Upaya awal menghasilkan versi pertama, Haskell 1.0, pada tahun 1990. Selama beberapa tahun berikutnya, berbagai ekstensi dan perbaikan diperkenalkan, dengan standar Haskell 98 diterbitkan pada tahun 1999. Standarisasi ini bertujuan untuk menciptakan basis yang stabil untuk ekosistem pustaka yang berkembang dan memfasilitasi adopsi yang lebih luas di dunia akademis dan industri.
Saat ini, Haskell telah berkembang menjadi bahasa yang serbaguna dan banyak digunakan di dunia akademis, industri, dan penelitian. Dengan pengembangan alat seperti GHC (Glasgow Haskell Compiler) dan pustaka seperti Haskell Platform, komunitas telah mendorong dukungan luas untuk berbagai aplikasi, terutama di bidang seperti ilmu data, keuangan, dan pengembangan web.
Haskell terinspirasi dari berbagai bahasa fungsional dan paradigma, menggabungkan ide-ide dari bahasa seperti Lisp dan ML. Bahasa ini juga memiliki akar yang sama dengan bahasa seperti Erlang dan Scala, terutama dalam aspek pemrograman fungsionalnya. Sistem tipe Haskell telah mempengaruhi bahasa seperti Rust dan Swift, yang menggabungkan elemen pemrograman fungsional dengan paradigma imperatif.
Haskell menggunakan sistem tipe statis yang kuat, yang memeriksa tipe pada waktu kompilasi. Pendekatan ini meminimalkan kesalahan waktu berjalan dan meningkatkan keandalan kode.
add :: Int -> Int -> Int
add x y = x + y
Haskell dapat menyimpulkan tipe secara otomatis, memungkinkan deklarasi fungsi yang ringkas sambil tetap mempertahankan keamanan tipe.
square x = x * x
Strategi evaluasi Haskell adalah malas, yang berarti ekspresi tidak dievaluasi sampai nilai mereka benar-benar dibutuhkan, memungkinkan struktur data tak terhingga dan meningkatkan kinerja dalam skenario tertentu.
ones :: [Int]
ones = 1 : ones -- Membuat daftar tak terhingga dari 1
Fungsi dalam Haskell adalah warga kelas satu, memungkinkan mereka untuk diteruskan sebagai argumen, dikembalikan dari fungsi lain, dan disimpan dalam struktur data.
applyTwice f x = f (f x)
Pencocokan pola menyediakan cara ringkas untuk mendestrukturisasi data, membuat kode lebih mudah dibaca dan ditulis.
describeList :: [a] -> String
describeList [] = "Daftar kosong."
describeList [x] = "Daftar memiliki satu elemen."
describeList xs = "Daftar memiliki beberapa elemen."
Semua data dalam Haskell adalah tidak dapat diubah, yang berarti tidak dapat diubah setelah dibuat. Ini mendorong gaya pemrograman deklaratif dan menghindari efek samping.
x = 5
-- x = x + 1 -- Ini akan menyebabkan kesalahan
Haskell menggunakan monad untuk menangani efek samping dan mengelola status, menyediakan abstraksi yang kuat untuk urutan komputasi.
import Control.Monad
main = do
putStrLn "Masukkan nama Anda:"
name <- getLine
putStrLn ("Halo, " ++ name ++ "!")
Komprehensi daftar memungkinkan konstruksi daftar yang ringkas dan dapat dibaca berdasarkan daftar yang ada, menggabungkan kemampuan penyaringan dan pemetaan.
evens = [x | x <- [1..10], even x] -- Menghasilkan daftar angka genap
Haskell mendorong penggunaan fungsi orde tinggi, memungkinkan fungsi untuk menerima fungsi lain sebagai parameter.
map :: (a -> b) -> [a] -> [b]
map f xs = [f x | x <- xs]
Kelas tipe Haskell memungkinkan polimorfisme dan memungkinkan pengembang untuk mendefinisikan antarmuka generik yang dapat diimplementasikan oleh berbagai tipe.
class Eq a where
(==) :: a -> a -> Bool
GHC adalah kompiler Haskell yang paling banyak digunakan, menawarkan kompiler optimasi berkinerja tinggi dan dukungan luas untuk fitur Haskell, termasuk konkuren dan paralelisme.
Stack dan Cabal adalah sistem build populer untuk mengelola proyek Haskell. Stack fokus pada build yang dapat direproduksi, sementara Cabal menawarkan sistem manajemen paket yang lebih fleksibel.
IDE umum untuk pengembangan Haskell termasuk Visual Studio Code, IntelliJ IDEA dengan plugin Haskell, dan Atom dengan dukungan Haskell. IDE ini menyediakan fitur seperti penyorotan sintaks, debugging, dan integrasi dengan GHC.
Untuk membangun proyek Haskell menggunakan Stack, Anda biasanya akan membuat proyek baru dengan stack new project-name
, dan kemudian menggunakan stack build
untuk mengompilasi kode. Untuk Cabal, proses dimulai dengan cabal init
untuk mengonfigurasi proyek, diikuti dengan cabal build
.
Haskell digunakan di berbagai domain, termasuk:
Haskell menonjol karena paradigma fungsional murninya, tipe statis yang kuat, dan evaluasi malas, yang kontras dengan bahasa imperatif seperti C++, Java, dan Python.
Untuk pengembang yang ingin menerjemahkan kode Haskell ke bahasa lain, alat seperti hsc2hs
dapat memfasilitasi integrasi Haskell dengan pustaka C. Berbagai alat penerjemah sumber ke sumber tersedia, meskipun sebagian besar untuk bahasa seperti C dan C++. Mempertahankan kejelasan kode dan memanfaatkan komentar dalam Haskell dapat mempermudah proses terjemahan.