Začínáme s Haskellem

FIXME: nejake ty recicky na uvod?
FIXME: inspirovat se napriklad timhle http://book.realworldhaskell.org/beta/starting.html ?

Překladač

Existuje několik překladačů Haskellu, ovšem pro většinu případů, obzvláště pro začínající uživatele, bude jistou volbou GHC. Obsahuje jak překladač do spustitelného binárního souboru, tak interpret, který je vhodný pro první pokusy s jazykem. Jde v podstatě o standardní kompilátor Haskellu, existuje pro něj nejvíce knihoven, generuje rychlý kód a je aktivně vyvíjen.

Aktuální verze GHC je 6.10.1, je to open source projekt distribuovaný pod velmi benevolentní licencí.

Knihovny

Kolekci knihoven pro GHC najdete v tzv. hackage. Jsou to balíčky systému Cabal. Cabal je součástí GHC, tudíž po instalaci ghc potřebný balíček stáhnete, rozbalíte a nainstalujete následujícím způsobem:

# runghc Setup.hs configure
# ruhghc Setup.hs build
# runghc Setup.hs install

Existuje automatizovaný nástroj – cabal-install – který stáhne a nainstaluje balíček včetně jeho závislostí.

Hello world

Ačkoli bysme se už konečně syndromu „Hello, world!“ mohli zbavit, tak sem ještě jeden napíši. Alespoň do doby, než se přijde na něco duchaplnějšího vyznačující se stejnou jednoduchostí. Oproti hello worldu z příkladů uvedu kompletní zkompilovatelný modul hello.hs:

module Main where
 
-- kazdy program musi obsahovat funkci main
main :: IO ()
main =
  putStrLn "Hello, world!"

První řádek označuje název modulu. Zde není povinný, ale dělit program do modulů je nanejvýš vhodné (pokud nepíšete pouze hello worldy), proto ho zde uvádím.

Další neprázný řádek je komentář. V Haskellu existují jednořádkové komentáře uvozené dvěmi pomlčkami nebo víceřádkové komentáře, které začínají znaky {- a končí -}.

Další řádek obsahuje typovou signaturu funkce main. Také není povinná, v Haskellu není nutné (ve většině případů) explicitně udávat typy díky tzv. typové inferenci (FIXME odkaz). Uvádět typové signatury však patří k dobrým mravům programátora. Usnadníme tím nejen čtení kódu, ale také ulehčíme práci překladači, což oceníme hlavně u chybových hláškách během překladu. S typovými signaturami má překladač lepší možnost identifikace místa chyby. O datových typech se můžete více dozvědět zde (FIXME: odkaz).

Následuje funkce main, která nemá žádné parametry (nesmí je mít ani definované, funkce main musí být typu IO a). Po ní následuje už jen výpis textu.

Míra odsazení udává míru zanoření v programu, stejně jako je tomu např. u jazyka Python. Je to však jen jedna z variant, je možné použít známé složené závorky a středníky. Zde vidíme ekvivalentní způsoby zápisu:

main = do
  putStrLn "foo"
  putStrLn "bar"
main = do {putStrLn "foo"; putStrLn "bar"}

Ovšem většina programátorů se drží spíše prvního, přehlednějšího zápisu. Druhý se často používá v prezentacích či článcích, aby zde nedošlo k chybné interpretaci čtenářem.

Způsob kompilace není ničím překvapivý:

# ghc hello.hs -o hello

Pokud používáte knihovny nebo i více modulů, hodí se přepínač –make (dvě pomlčky), který za vám ušetří práci při psaní Makefile.

zacatecnici/zaciname_s_haskellem.txt · Poslední úprava: 2009/04/15 10:41 (external edit)
Nahoru