在Haskell中安全应用

jul*_*icz 5 monads haskell functional-programming exception-handling exception

我有一段代码,在列表monad中,应用了一个函数.函数可能潜在地为其参数进行非详尽的模式匹配.因此,当应用该函数时,我可能会收到"Non-exhaustive pattern matching"错误.我想将此错误转换为monadic失败(在这种情况下,为空列表).换句话说,我想得到一个类似的行为,当Some Pattern Here <- some value一个do块内部失败时会发生什么 .

问题:是否有一种有效的方法使功能应用程序安全?通过有效,我的意思是类似于使应用的功能完全匹配并明确失败.

Dan*_*att 3

一种选择是使用Spoon将函数从引发异常的函数转换为返回Maybe a值的函数。那么转换Nothing[].

  • 我不确定 Spoon 是否应该积极推广,请参阅此线程 http://www.reddit.com/r/haskell/comments/acasn/tired_of_functions_that_could_live_in_maybe_but/ (4认同)
  • 我觉得勺子还好 是的,它破坏了理论属性和东西,但是该库的目的是处理蹩脚代码(无论如何,这些代码还没有以与所述理论属性很好地配合的方式定义)。当替代方案是从头开始重新实现时(或者在这种情况下......解析并修复用户的代码 - 哎呀!),spoon 是一个很好的替代方案。 (2认同)