Hoogle — Mesin Pencari untuk Haskeller

Wisnu Adi Nurcahyo 11 Januari 2017

Hoogle — Mesin Pencari untuk Haskeller

Hoogle adalah mesin pencari API Haskell. Dengan Hoogle, kita bisa mencari tahu macam-macam fungsi yang bisa kita gunakan. Menariknya, informasi seperti di module mana fungsi itu berada, berapa jumlah parameter-nya, output-nya dalam bentuk tipe data apa, serta (beberapa) ada contoh penggunaannya. Karena itu, Hoogle berperan penting dalam proses belajar Haskell. Tertarik bermain dengan Hoogle? Lalu, bagaimana caranya menggunakan Hoogle?

Tulisan ini adalah kelanjutan dari tulisan sebelumnya yaitu "Memulai Belajar Haskell". Selama belajar, kita akan terus menggunakan Hoogle sebagai referensi fungsi-fungsi Haskell.

Sebagai permulaan, kita coba cari tahu mengenai fungsi putStrLn di Hoogle. Silakan masukan fungsi yang ingin dicari di kolom pencarian yang sudah disediakan, lalu tekan ENTER. Setelah itu, muncul banyak fungsi putStrLn yang tersedia di Haskell. Ya, satu fungsi di Haskell belum tentu hanya tersedia di satu module. Seperti contoh fungsi putStrLn tersedia di berbagai module dengan "perannya" masing-masing. Nah, sekarang, silakan lihat kata "putStrLn" di bagian base Prelude tepatnya hasil pencarian paling atas.

Prelude adalah module bawaan Haskell.

Kita akan melihat putStrLn :: String -> IO (). Bagian :: String -> IO () adalah apa yang disebut dengan Type Signature. Bagian ini memberitahu apa-apa saja yang boleh menjadi input dari fungsi tersebut dan apa keluaran dari fungsi tersebut. Type Signature juga memberikan informasi berapa parameter fungsi tersebut. Cara membacanya, untuk output dari fungsi tersebut, cukup lihat kata terakhir setelah tanda ->. Pada kasus ini adalah IO (). IO () maksudnya input-output atau di dalam Haskell disebut sebagai "Dunia Luar". Artinya, fungsi tersebut akan memberikan sesuatu ke dunia luar. Untuk input dari fungsi tersebut, kita hanya perlu melihat kata-kata setelah :: dan sebelum bagian output. Pada kasus ini, setelah :: dan sebelum output tadi adalah String. Artinya, fungsi tersebut untuk tipe data string yang mana akan diolah ke "Dunia Luar".

Contoh, replicate :: Int -> a -> [a]. Ada dua parameter, yaitu pada bagian Int -> a, Int dan a. Keluarannya adalah [a].

Apa itu a? Jawabannya, Type Variable. Artinya, pada parameter tersebut, bisa tipe data apapun. Kalau nanti bertemu dengan b, itu juga sama (Type Variable). Sederhanya, Type Variable menggunakan huruf kecil (lowercase). Sementara data type, menggunakan huruf kapital di depan (misal String).

Contoh lain, getLine :: IO String. Fungsi seperti ini tidak memiliki parameter. Artinya, fungsi ini berjalan tanpa membutuhkan parameter apapun yang kemudian keluarannya adalah berupa IO String. IO maksudnya input-output. Jadi, keluaran atau hasilnya berupa String dari "Dunia Luar".

Seputar Type System sendiri masih banyak yang belum disebutkan. Tapi, sepertinya, beberapa penjelasan di atas sudah cukup untuk memulai eksplorasi ke dunia Haskell lebih jauh. Sekarang kita lanjut ke bagian berikutnya.

Tepat di bawah Type Signature ada informasi mengenai di module mana fungsi tersebut berada. Dengan ini, kita dapat melakukan import module secara tepat sesuai dengan kebutuhan.

Di bawah informasi module, ada beberapa penjelasan atau deskripsi mengenai fungsi tersebut. Nah, sekarang coba klik fungsi yang ingin dilihat lebih dalam. Bila beruntung, pada fungsi tersebut, ada contoh penggunaannya.

Berdasarkan informasi dari tulisan ini, sepertinya kamu sudah siap untuk eksplorasi fungsi-fungsi Haskell. Lalu, setelah melihat informasi di Hoogle, bagaimana cara pengaplikasiannya?

Mencoba Fungsi Berdasarkan Informasi Hoogle

Untuk mencoba fungsi tadi, gunakanlah Try Haskell. Misal, kita menemukan fungsi foldl. Type Signature-nya adalah foldl :: (a -> b -> a) -> a -> [b] -> a. Pada fungsi ini, ada parameter (a -> b -> a). Maksudnya, parameter tersebut adalah sebuah fungsi operasi yang membutuhkan dua operand. Contoh, 1 + 2 dimana 1 dan 2 adalah operand dan + adalah fungsi operasinya.

Nah, parameter foldl ada tiga sesuai dengan Type Signature-nya. Pertama, (a -> b -> a). Kedua, a. Dan ketiga, [b]. Maksud dari [b] adalah sebuah List (di Haskell bukan array, tapi list) dengan tipe data apapun (yang satu jenis, misal integer saja). Adapun keluarannya adalah a.

Sekarang, kita coba lakukan foldl (+) 0 [1..100]. Hasilnya adalah 5050. Satu lagi, foldl (++) [] ["Halo, ", "Haskell!"]. Hasilnya adalah "Halo, Haskell!".

Well, untuk saat ini itu saja. Karena jika terlalu banyak juga nanti kepala bisa-bisa "ngebul". Sampai berjumpa di lain waktu!