Datový typ Maybe je velmi užitečný. Obsahuje dva konstruktory: Just x
a Nothing
. Pokud je daná hodnota dostupná, vyjádří se jako Just hodnota
, v opačném připadě jako Nothing
. Můžeme na tento datový typ nahlížet jako na hodnotu NULL
v databázových systémech. Dalším šikovným datovým typem je Either. Ten má dva datové konstruktory: Left x
a Right y
. Vrací jednu ze dvou hodnot, přičemž hodnoty v těchto konstruktorech mohou být různého typu.
V Haskellu máme několik možností, jak ošetřit výjimečné či chybové stavy. Můžeme vyhazovat obecnou chybu pomocí funkce error
, napsat si vlastní chybovou funkci pomocí monád (např. přes modul Control.Monad.Error, pro samotný vstup a výstup System.IO.Error), použít modul Control.Exception, či vracet datový typ Maybe
nebo Either
. Podrobný popis těchto řešení lze nalézt v lehce zastaralém článku článku Erica Kidda a nebo v devatenácté kapitole knihy Real World Haskell.
Ať už zvolíme jakýkoliv přístup, naše programy musí být robustní, dobře strukturované a nesmí mást uživatele nesmyslnými chybovými hláškami. V případě modulu Control.Exception
máme možnost výjimky odchytávat a dále zpracovávat pomocí funkce catch
, což hodně věcí usnadňuje.
Za zmínku stojí i modul System.Exit, pomocí kterého můžeme naše programy řádně ukončovat. Bývá totiž dobrým zvykem v prostředí operačních systémů dle standardu POSIX používat návratový kód programu k identifikaci stavu, podle kterého se dále mohou řídit ostatní programy. Funkce exitSuccess
ukončí program, je-li všechno v pořádku (typicky s návratovým kódem 0
), funkce exitFailure
, nastaly-li nějaké chyby (typicky s kódem 1
), a konečně, funkce exitWith
nám ve spojení s konstruktorem ExitFailure
umožňuje program ukončit s námi definovaným návratovým kódem (typicky z rozsahu 1-127
).