Ako pracovať s Haskellom


Okrem klasickej metódy "pero a papier" sa dá pracovať s Haskellom niekoľkými spôsobmi. Medzi najznámejšie programy na tento účel patria GHC (The Glasgow Haskell Compiler, http://www.haskell.org/ghc/) a Hugs (http://www.haskell.org/hugs/). Hoci v rámci predmetu IB015 sú rozdiely medzi nimi len veľmi malé, vhodnejšie je používať GHC, keďže je aktuálnejší a je de facto štandardom pre prácu s Haskellom. Vo všeobecnosti býva s programovacími jazykmi možné pracovať interpretovane a kompilovane, avšak vzhľadom na obsah predmetu sa obmedzíme len na interpretovaný prístup.

V miestnosti B130, kde prebiehajú všetky cvičenia, sú na strojoch (nymfe) k dispozícii aj Hugs, aj GHC. Obidva tieto nástroje pracujú v textovom režime, preto je vhodné najprv si spustiť terminál/konzolu. K nej je možné dostať sa klávesovou skratkou Alt+F2, zadať terminal (všetko malým) a potvrdiť Enterom.

Už tu by som poznamenal, že pri zadávaní akýchkoľvek vecí kamkoľvek treba dbať na veľkosť písmen, pretože v unixových OS sa narozdiel od Windows rozlišuje medzi malými a veľkými písmenami (case sensitivity). V dôsledku toho zadanie príkazu/názvu súboru/väčšiny iných vecí s inou kombináciou veľkých a malých písmen bude mať pravdepodobne za následok chybovú správu.

Po spustení terminálu sa zobrazí okno s promptom, zvyčajne vyzerá takto: aisa:/home/xszanisz>$ . To znamená, že používateľ je prihlásený na stroji s názvom aisa a nachádza sa v adresári /home/xszanisz (domovský adresár používateľa xszanisz). Zároveň zobrazený prompt znamená, že je možné zadávať príkazy. Medzi základné príkazy patria:

Spustiť interpret Haskellu z terminálu je možné zadaním príkazu ghci, prípadne hugs. Po výpise úvodnej správy sa zobrazí zase prompt, tentokrát to však nie je prompt terminálu, ale prompt interpretu. Nie je možné zamieňať príkazy zadávané v termináli a interprete. Prompty sa líšia podľa interpretu: v GHCi to je Prelude>  a v Hugse Hugs> .

Čo sa týka základných príkazov, GHCi a Hugs sa nelíšia. Ukončiť interpret je možné príkazom :q, načítať obsah Haskellového skriptu v súbore file.hs príkazom :l file.hs, znovunačítať jeho obsah po jeho úpravení príkazom :r, príkazom :h sa zobrazí krátka nápoveda, :t určí typ výrazu, :i zobrazí nejaké informácie o type, konštruktore, premennej, či funkcii. Okrem toho je v ňom možné zadávať výrazy na vyhodnotenie, napríklad map (*2) [1,2,3] alebo 10 + 8 * 11 == 7 * 18 atď. V prípade, že vyhodnocovanie výrazu trvá príliš dlho, je možné ukončiť ho klávesovou skratkou Ctrl+C.

Čo sa týka práce s Haskellovými skriptmi, na ich vytvorenie je potrebný nejaký textový editor. V B130 sú k dispozícii ako textové (vim, nano, emacs), tak aj grafické editory (gedit, kate). Práca s grafickými editormi je pomerne intuitívna, tými sa preto nebudeme zaoberať. Čo sa týka textových editorov, tri uvedené patria medzi najpoužívanejšie, avšak majú svoje výhody a nevýhody. Každý editor je možné spustiť s názvom súboru, ktorý treba upraviť, ako argumentom, teda napríklad vim test.hs.

Nano. Editor na jednoduché úpravy. Základné príkazy sa zobrazujú v spodných riadkoch. Najdôležitejšie sú ^x = ukončenie, ^o = uloženie. Skratka ^x znamená stlačenie Ctrl+x a skratka ^x ^y stlačenie Ctrl+x a následne Ctrl+y.
Vim. Pokročilý editor umožňujúci komplexnú prácu s textom, avšak aspoň pre začiatočníkov sú jeho funkcie náročné na ovládanie. Má dva základné režimy: príkazový a vkladací. V príkazovom je možné zadávať príkazy: :q = ukončenie editora, :wq = uloženie súboru a ukončenie, :q! = ukončenie bez uloženia zmien, :w = uloženie súboru, :w new.hs = uloženie súboru pod iným názvom, dd = zmazanie aktuálneho riadka, i = prepnutie do vkladacieho módu a veľké množstvo ďalších. Vkladací mód už umožňuje klasické editovanie textu a navigáciu pomocou kurzorových šipok a kláves PgUp atď. Samozrejme v ňom nefungujú príkazy príkazového módu. Na to je nutné prepnúť sa doň späť klávesou Esc.
Emacs. Takisto pomerne pokročilý editor. Klávesové skratky: ^x ^c = ukončenie, ^g = zrušenie príkazu, ^x s = uloženie súboru.

Po vytvorení súboru file.hs je možné načítať ho v interprete už spomínaným príkazom :l file.hs, prípadne ak má súbor príponu .hs, stačí :l file. Ďalej častou chybou pri načítavaní býva, že načítavaný súbor je v inom adresári ako ten, z ktorého sa spustil interpret. V takom prípade je treba buď presunúť súbor do toho adresára alebo zatvoriť interpret, zmeniť adresár, spustiť interpret a znovu sa pokúsiť o načítanie. (Prípadne zmeniť v interprete adresár príkazom :cd adresar.)

Po úspešnom načítaní súboru dôjde v GHCi k výpisu správy a zmene promptu z Prelude> na *Main> . Pri načítaní v Hugse bez chyby sa zas zmení prompt z Hugs> na Main> bez výpisu nejakej správy. Teraz je možné používať definície z načítaných súborov. Súčasne nie je možné načítavať viac súborov - pri načítaní ďalšieho sa z pamäte odstráni predchádzajúci.

Zatiaľ uvedený text sa zaoberal prácou na strojoch v učebni B130. Mimo cvičení je možné využiť dve možnosti - pripojiť sa na fakultné stroje vzdialene a pracovať na nich alebo nainštalovať si GHC/Hugs na vlastný počítač.

Pripájanie sa na vzdialené stroje a práca v textovom režime sa líši pre Windows, Linux+Mac. Pod Linuxom a Macom sa dá pripojiť cez terminál príkazom ssh xlogin@nymfeXX.fi.muni.cz, prípadne ssh xlogin@aisa.fi.muni.cz a voliteľne z aisy zas ssh xlogin@nymfeXX.fi.muni.cz, kde XX je dvojčíslie určujúce konkrétny fakultný stroj. Login a heslo sú také isté, ako tie na prihlasovanie sa v učebniach, t.j. fakultný login a fakultné heslo.

Pod Windows je k dispozícii program PuTTY (http://www.chiark.greenend.org.uk/~sgtatham/putty/). Stačí si stiahnuť binárku putty.exe. Po spustení treba zadať do Host Name názov stroja (aisa.fi.muni.cz alebo nymfeXX.fi.muni.cz, kde XX je dvojčíslie z rozsahu 01 až 86, čo sú počítače v hale), stlačiť Open a po zadaní mena a hesla je k dispozícii terminál.

V rámci siete MU by malo byť pripájanie sa na tie stroje bez problémov, avšak mimo siete MU platia isté obmezdenia: http://www.fi.muni.cz/tech/unix/vnejsi-sit.xhtml. V prípade takýchto problémov je lepšie nainštalovať si GHC alebo Hugs u seba (prípadne využiť univerzitné VPN: http://vpn.muni.cz/doku.php).

Čo sa týka inštalácie GHC/Hugsu, môže byť jednoduchšie nainštalovať si Hugs, keďže má rádovo menšie nároky na miesto na disku (~ 50 MB) ako GHC (~ 700 MB). Navyše sa neodporúča inštalovať priamo GHC, ale Haskell Platform, ktorý je ešte o niečo rozsiahlejší. Všetky tri programy sú licencované ako open source. Hugs je možné stiahnuť na http://cvs.haskell.org/Hugs/pages/downloading.htm.

Okrem doteraz spomenutých možností existuje ešte alternatíva - online interpret, ktorý je dostupný na http://tryhaskell.org/. Umožňuje, podobne ako GHCi-Hugs, vyhodnocovanie výrazov. Samozrejme, vzhľadom na jeho povahu neumožňuje načítavať súbory, vykonávať väčšinu príkazov (avšak :t funguje) a doba vyhodnocovania výrazov je obmedzená.

Ďalšie užitočné informácie:

http://www.fi.muni.cz/tech/
http://www.fi.muni.cz/tech/start.xhtml
http://www.haskell.org/ghc/
http://www.haskell.org/hugs/

A na záver motivačný obrázok:
Haskell is pure fun!