我试图了解如何应用 Haskel 的 Maybe-idiom。我正在阅读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”,它应该报告哪个资源有问题。