Haskell je standardizovaný funkcionální programovací jazyk. Využívá princip líného vyhodnocování a je pojmenovaný na počest logika Haskella Curryho. Velmi rychle se vyvíjí a to především díky svým implementacím Hugs a GHC.

Jedná se o jazyk, který dodržuje referenční transparentnost. Jde o to, že tentýž výraz nebo podvýraz má na jakémkoliv místě v programu stejnou hodnotu.

Další vlastností jazyka je přísné typování proměnných. To může programátorům usnadnit odhalování chyb v programu. Haskell zároveň plně podporuje práci se soubory i se standardními vstupy a výstupy.

Vývoj v čase

Historie jazyka sahá do konce osmdesátých let 20.století. Byl navržen skupinou vědců, kteří se pokoušeli vytvořit otevřený standard funkcionálního programovacího jazyka s moderními vlastnostmi. V devadesátých letech byl dále rozvíjen především v akademické sféře. Později začal být známý i mimo vědeckou komunitu a to částečně i díky online komunitě. Jako poslední ustálená verze figuruje revize Haskell 98, která definuje minimální a přenositelný standard jazyka. Ten je využitelný ve výuce a zároveň je základem dalších rozšíření.

Čím se Haskell odlišuje?

Haskell je čistě funkcionální programovací jazyk. Má dlouhou historii a programy v Haskellu jsou sérií vysokoúrovňových zobecnitelných funkcí, které definují, co má program dělat. Jazyk pak skrývá nízkoúrovňové provozní záležitosti, jako jsou například iterace.

Má silnou bezpečnost typů. Inferenční systém produkuje kód s minimálním množstvím vedlejších účinků. Programátor se soustředí na výsledky spíše nežli na formulaci dlouhé série kroků.

Kompiler produkuje čistý, stručný a správný kód, tedy pokud se kód podaří zkompilovat, téměř vždy to znamená, že je funkční. To je velký kontrast například oproti Ruby, kde testovací kód může zabrat dvojnásobek nebo trojnásobek velikosti aplikace a i tak není zárukou toho, že je spouštěný kód v pořádku.

Silné stránky jazyka se projeví především v komplexních a unikátních analýzách, ale velký rozdíl je vidět i u krátkých útržků kódu. Například v porovnání s Javou je jednodušší pochopit smysl kódu na první pohled.

Výhody použití Haskellu

  • Dostupnost knihoven. Přestože Haskell není tak rozšířený jako některé jiné jazyky, má relativně širokou databázi balíčku nazývanou Hackage. Hackage obsahuje přibližně sedmkrát méně nežli například databáze balíčků pro Python, přesto pokrývá relativně širokou škálu použití a rychle roste.
  • Testování. Čistota a líné vyhodnocování dělají testování jednoduchým. Testovací knihovny se často zkoušejí nejprve na Haskellu a až následně jsou upravené i pro Scalu nebo Python. Zároveň díky silnému a expresivnímu systému statických typů existuje mnoho věcí, které je potřeba testovat u jiných jazyků, ale ne u Haskellu.
  • Rychlost a paralelní zpracování. Hlavní kompiler Haskellu GHC má velmi výkonný kód. Za pomoci optimalizace s minimálními změnami kódu může kód v Haskellu běžet podobně rychle jako kód v C.
  • Znovupoužití kódu. Expresivní typový systém a vysoká úroveň abstrakce umožňují vysokou úroveň znovupoužitelnosti kódu. Snížení duplikace kódu zároveň vede k tomu, že vývojář se může plně soustředit na stavbu systémů a design algoritmů.

Nevýhody použití Haskellu

  • Komunita. Vzhledem k tomu, že se jedná o méně rozšířený jazyk, je těžší získat informace o řešení různých problémů. Komunita například na StackOverflow je viditelně menší nežli například pro Python, Django nebo Ruby.
  • Náročnost na učení. Haskell je náročné se naučit. Jedná se o relativně neobvyklý druh funkčního programování s akademickým původem.
  • Lenost. Haskell je líný jazyk, což znamená, že hodnoty nejsou vyhodnocovány, dokud nejsou potřeba. To má mnoho benefitů, zároveň může ale docházet k problémům s obtížností analýzy využití paměti. Stává se tak, že je potřeba řešit takzvané space leaks, tedy problémy s nepřiměřenou spotřebou paměti. Nestává se to sice příliš často a problémům se dá vyhnout, přesto tento druh chyb u jiných jazyků v podstatě nevzniká.

Kdy použít Haskell?

Haskell se velmi dobře hodí pro algoritmické aplikace a problémy, které vyžadují paralelní řešení. Často je využíván v datově náročných oblastech, jako jsou finanční služby, big data aplikace, farmaceutický průmysl, biotechnologie, ropný průmysl nebo spotřebitelská data.