Om berekeningen voor te stellen die zouden kunnen falen op verschillende manieren kan je gebruik maken van het volgende algebraïsch datatype:
data Ofwel a b = Links a | Rechts b
De conventie is om fouten te taggen met Links
en juiste antwoorden met Rechts
. In het volgende stukje Haskell code wordt het Ofwel
datatype gebruikt om de exacte gehele deling te implementeren. In dat voorbeeld zijn er twee mogelijke error’s: men zou kunnen delen door 0 of door een getal dat geen deler van de teller is.
safeDiv :: Int -> Int -> Ofwel String Int
safeDiv x y | y == 0 = Links "can't divide by zero"
| x `mod` y /= 0 = Links "not exact"
| otherwise = Rechts (x `div` y)
Ofwel
een instantie van Monad zodat het voorbeeld safeDiv
werktsharing
, die safeDiv
gebruikt, werkende zoals aangegeven in de documentatie. Je mag kiezen of je gebruik maakt van de do-notatie of expliciet >>=
gebruikt.!!?
, die op veilige wijze het nde element uit een lijst geeft.