如何在Haskell中实现“对称非严格或”

时间:2014-07-04 04:54:58

标签: haskell

我想定义一个具有以下属性的函数

symmetricLazyOr :: Bool -> Bool -> Bool
symmetricLazyOr True _|_ === True
symmetricLazyOr _|_ True === True

否则它就像普通的or一样工作。

在Haskell中甚至可能吗?

更新

这个问题主要关注语义而不是实现细节。直观地,or应该是对称的,这对于所有给定的or a b === or b aa来说都是b。但是,自or _|_ True === _|_ or True _|_ === True以来{H}中的情况并非如此。

1 个答案:

答案 0 :(得分:14)

换句话说,你正在寻找一个函数,给定两个参数,试图对它们进行评估,如果两个参数都为真,那么它是真的吗?特别是,只要至少有一个参数是True而不是底部,就会返回True个结果?

假设这是正确的,这是可能的,但不是纯粹的。为了实现它,您需要竞争两个线程来评估每个分支。 unamb包具有一些处理这种情况的函数(包括并行或函数por)。另一种选择是lvish,在我理解的情况下也适用于这种情况。