【发布时间】:2013-10-29 10:40:23
【问题描述】:
我的代码中有以下构造:
f :: Maybe A -> X
f a = case a of
Nothing -> x
(Just b) -> case b of
Nothing -> y
(Just c) -> case c of
Nothing -> z
(Just d) -> d
我没有看到一个明显的方法来简化这个而不是使用嵌套的maybe 函数,这不会让整个事情看起来更好。有没有什么聪明的——但仍然可以理解的——技巧可以帮助这个结构更“优雅”?
【问题讨论】:
-
你需要一个更好的结构来解决问题然后嵌套
Maybe -
你不关心 b 和 c 的值,只关心它们是否有值,这似乎有点奇怪。这使得它们有效地布尔值。 Maybes层是任意深还是固定深度?
-
你的模型基本上是错误的。您需要链接(即映射)函数/函子,而不是采用这种命令式风格。
-
@itsbruce:用简单的英语是什么意思? (又名,翻译功能是什么?)
-
这里的答案没用,因为它们傲慢地暗示,你只有一个嵌套的 Maybe,而给定的例子不仅仅是一个更复杂 (一组函数也返回 Maybe 值,commeon 也是如此。
标签: haskell nested pattern-matching simplify maybe