我想定义一个具有以下属性的函数
symmetricLazyOr :: Bool -> Bool -> Bool
symmetricLazyOr True _|_ === True
symmetricLazyOr _|_ True === True
Run Code Online (Sandbox Code Playgroud)
否则它就像正常一样工作or.
在Haskell中甚至可能吗?
UPDATE
这个问题主要关注语义而不是实现细节.直观地,or应该是对称的,这意味着or a b === or b a所有给定的a和b.然而,这是不是真的在Haskell,因为or _|_ True === _|_同时or True _|_ === True.
Joh*_*n L 14
换句话说,你正在寻找一个函数,给定两个参数,试图评估它们两者,如果任一参数为真,则为真?特别是,True只要至少有一个参数True而不是底部,就会返回一个结果?
假设这是正确的,这是可能的,但不是纯粹的.为了实现它,您需要竞争两个线程来评估每个分支.该unamb封装具有某些功能用于处理这样的情况下(包括并行或功能por).另一个选择是lvish,在我理解的情况下也应该适用于这种情况.