たとえば、fnB :: a -> Bool
return まで意味のない操作がありfnA :: Bool
ますFalse
。CI では、次の 2 つの操作を 1 つのif
ブロックにまとめることができます。
if( fnA && fnB(a) ){ doSomething; }
Cは false を返すfnB
まで実行しないことを保証します。fnA
seq
しかし、Haskell は怠け者であり、通常、コードを厳密にするために 、$!
、またはその他の何かを使用しない限り、どの操作が最初に実行されるかは保証されません。一般的に、これは私たちが幸せになるために必要なものです。しかし、演算子を使用すると、結果が返されるまで評価されないこと&&
が予想されます。Haskell は でそのような保証を提供しますか? また、Haskellは Falseを返しても評価しますか?fnB
fnA
&&
fnB
fnA