Edit this page Backlinks This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ===== Haskell Environment ===== Primul pas spre a putea învăța Haskell este să avem o modalitate de a rula codul scris. Puteți descărca platforma Haskell de [[https://www.haskell.org/platform|aici]] (Windows/OS X/Linux) sau puteți căuta pachetul "ghc" în repourile distribuției voastre. [[https://wiki.haskell.org/GHC|ghc]] este un compilator de Haskell, similar cu gcc. Pentru început, nu vom compila programe, ci vom rula în modul interactiv, care ne permite să apelăm funcții din consolă și să vedem rezultatul lor. Putem să încărcăm și fișiere cu fragmente de cod din care să apelăm funcții definite de noi. Pentru modul interactiv, rulați "ghci". Ar trebui să vedeți ceva asemănător: <code> GHCi, version 8.4.3: http://www.haskell.org/ghc/ :? for help Prelude> </code> Mesajul constă în numele interpretorului și versiunea, urmat de un link către siteul oficial. A doua linie este promptul interactiv; "Prelude" este numele unui modul default care vă pune la dispoziție foarte multe tipuri (e.g. ''Bool'') și funcții (e.g. ''length'') utile. Orice expresie scrieți este evaluată, iar rezultatul afișat pe următoarea linie: <code> Prelude> 2 + 2 4 Prelude> </code> Deasemena tot în ghci, puteți defini direct variabile sau funcții: <code> Prelude> patru = 4 Prelude> patru 4 Prelude> plus a b = a + b Prelude> plus 2 2 4 Prelude> </code> ghci acceptă comenzi în formatul '':<nume> <argumente>'', care ajută cu încărcarea codului, inspectarea acestuia și înțelegerea limbajului. Comenzile pot fi invocate cu numele complet, sau cu un subșir al acestuia. În tabelul de mai jos, se găsesc cele mai utile comenzi și o explicație a acestora (tot ce e între paranteze pătrate face parte din numele complet al comenzii, dar nu e necesar): ^ Cheatsheet ghci: ^^ ^ Comandă ^ Efect ^ |:cd //<director>// | schimbă directorul curent al ghci | |:l[oad] //<file1>// //<file2>// ... | încarcă fișiere Haskell în ghci (alte fișiere încărcate a priori vor fi descărcate) | |:r[eload] | echivalentul la a rula din nou ultima comandă de "load" | |:m[odule] + //<module1>// //<module2>// ... | importă modulele* în ghci (fără a afecta modulele deja importate) | |:i[nfo] //<nume>// | afișează informații despre un nume (e.g. funcție, tip, constructor de tip*, clasă*) | |:t[ype] //<expresie>// | afișează tipul expresiei | |:k[ind] //<tip>// | afișează //kind//*-ul unui tip | |:bro[wse] Main | afișează toate definițiile scrise de voi în fișierul încărcat | |:e[dit] | deschide ultimul fișier încărcat în editorul default (după închiderea editorului, se revine în ghci) | |:h[elp] sau :? | afișează meniul de help cu toate comenzile disponibile | |:q[uit] | închide ghci | * - nu vă faceți griji dacă nu vă întâlniți cu aceste concepte la primele laboratoare. === Exemplu de sesiune interactivă === Considerăm urmatorul fișier, numit ''work.hs'': <code haskell> -- work.hs data Tree a = Empty | Node (Tree a) (Tree a) constantThree = '3' mySum :: Int -> Int -> Int mySum a b = a + b </code> În ghci: <code haskell> Prelude> :l work.hs [1 of 1] Compiling Main ( work.hs, interpreted ) Ok, one module loaded. *Main> :browse Main type role Tree phantom data Tree a = Empty | Node (Tree a) (Tree a) constantThree :: Char mySum :: Int -> Int -> Int *Main> :k Tree Tree :: * -> * *Main> :i mySum mySum :: Int -> Int -> Int -- Defined at work.hs:7:1 *Main> isDigit constantThree <interactive>:28:1: error: Variable not in scope: isDigit :: Char -> t *Main> :m + Data.Char *Main Data.Char> isDigit constantThree True *Main Data.Char> constantThree '3' *Main Data.Char> :t isDigit isDigit :: Char -> Bool *Main Data.Char> :quit </code>