Опитвам се да разбера как да приложа Maybe-идиома от Haskel.. Чета http://en.wikibooks.org/wiki/Haskell/Understanding_monads/Maybe, което показва, че търсене в речник може да върне Maybe
и че тази стойност се разпространява чрез оператора >>=
.
Примерът от URL адреса:
Ако след това искаме да използваме резултата от търсенето в правителствената база данни при трето търсене (да речем, че искаме да потърсим техния регистрационен номер, за да видим дали дължат данък върху автомобила), тогава бихме могли да разширим нашата функция getRegistrationNumber:
getTaxOwed :: String -- their name
-> Maybe Double -- the amount of tax they owe
getTaxOwed name =
lookup name phonebook >>=
(\number -> lookup number governmentalDatabase) >>=
(\registration -> lookup registration taxDatabase)
Или, използвайки стила do-block:
getTaxOwed name = do
number <- lookup name phonebook
registration <- lookup number governmentalDatabase
lookup registration taxDatabase
Въпрос:
Как да се справя с обработката на грешки? Мисля, че повечето кодове ще имат полза от това да кажат къде нещата са се объркали. Вместо просто да докладва „не можах да намеря John Doe нито в телефонния указател, нито в правителствената база данни“, трябва да докладва кой ресурс е имал проблеми.
sqrt :: Either Complex Double
- person Sarah   schedule 13.08.2012