Haskell 当使用Data.Map时,如何知道哪些元素不在映射中。!
我有一个Haskell程序,它使用Haskell 当使用Data.Map时,如何知道哪些元素不在映射中。!,haskell,Haskell,我有一个Haskell程序,它使用Data.Map在几个地方。执行程序后,出现错误消息,说明元素不在映射中。 我想知道我怎么知道在程序的哪一行使用了Data.Map以及在地图中找不到的元素?该(!)操作符不用于查找可能不在地图中的内容。虽然您可以在IOmonad中捕获结果错误,但这将是非常糟糕的风格 相反,使用lookup,它返回可能是一个,特别是当元素不在映射中时,返回Nothing 编辑:好吧,我误解了你的问题。保留原始答案以防有用,但假设(!)确实是您想要的,并且您正在调试,您可以做以下几
Data.Map代码>在几个地方。执行程序后,出现错误消息,说明元素不在映射中
。
我想知道我怎么知道在程序的哪一行使用了Data.Map发出错误消息的代码>以及在地图中找不到的元素?该(!)
操作符不用于查找可能不在地图中的内容。虽然您可以在IO
monad中捕获结果错误,但这将是非常糟糕的风格
相反,使用lookup
,它返回可能是一个,特别是当元素不在映射中时,返回Nothing
编辑:好吧,我误解了你的问题。保留原始答案以防有用,但假设(!)
确实是您想要的,并且您正在调试,您可以做以下几件事:
您可以在导入中临时隐藏(!)
,而是定义您自己的版本,该版本使用查找
,并抛出一个更有用的错误(可能包含您试图查找的密钥,如果它有Show实例)
您可以在GHCi调试器中运行代码,并使用-fbreak on exception在发生查找的位置停止代码
您可以使用Debug.Trace
模块向代码中添加跟踪语句
不要使用(!)
。改为使用查找。此外,有关如何不明智地使用分部函数调试错误的上一个问题,请参见此处:太糟糕了,没有(!)
的安全变体。