Обычно каждый использует Maybe
для указания вычислений, которые могут "потерпеть неудачу", например:
computeSum :: Int -> Int -> <b>Maybe Int</b>
computeSum x y | result > 0 && result <= 10 = <b>Just</b> result
| otherwise = <b>Nothing</b>
where result = x + y
Так что он вернет Just result
в случае совпадения утверждений или Nothing
если утверждения не выполнены.
Иногда Either String a
используется для предоставления сообщения об ошибке, например:
computeSum :: Int -> Int -> <b>Either String Int</b>
computeSum x y | result > 0 && result <= 10 = <b>Right</b> result
| otherwise = <b>Left</b> "Result is note between 0 and 10"
where result = x + y
Вы также можете вызвать ошибку, но лично я думаю, что это не такжелательно, поскольку подпись не «намекает» на то, что вычисление может быть неудачным:
computeSum :: Int -> Int -> <b>Int</b>
computeSum x y | result > 0 && result <= 10 = result
| otherwise = <b>error</b> "result is not between 0 and 10"
where result = x + y