例如,我有一个在返回fnB :: a -> Bool
之前没有意义的操作。在 CI 中可以将这两个操作组合在一个块中:fnA :: Bool
False
if
if( fnA && fnB(a) ){ doSomething; }
并且 C 将保证在返回 falsefnB
之前不会执行。fnA
但是 Haskell 是懒惰的,而且通常不能保证首先执行什么操作,除非我们不使用seq
,$!
或其他东西来使我们的代码严格。一般来说,这就是我们需要快乐的东西。但是使用&&
运算符,我希望在返回结果fnB
之前不会对其进行评估。fnA
Haskell 是否提供这样的保证&&
?fnB
即使fnA
返回 False ,Haskell 也会进行评估吗?