haskell 中的运算符 &?

Operator & in haskell?

如何在haskell中检查真假操作之间的第二个参数?例如,False && True 将只检查第一个参数,然后停止操作。 Haskell 中是否有类似 False & True 的东西来检查两个参数?

您没有充分的理由想要这个,但如果您坚持...

import Control.Parallel (pseq)

(&&!) :: Bool -> Bool -> Bool
a &&! b = b `pseq` (a&&b)

通常,seq (which doesn't require any imports) will also suffice instead of pseq,但只有后者才能真正保证 b 将被评估。

当然,这个函数的语义将与单独的&&完全相同,只是在某些情况下会更慢。

prelude中的

&&实现为

(&&) :: Bool -> Bool -> Bool
True  && x =  x
False && _ =  False

这意味着在第一个参数是 False 第二个参数的情况下 一个从未被评估过。您始终可以实现自己的版本以获得您想要的行为,例如:

(.&&.) :: Bool -> Bool -> Bool
True  .&&. x =  x
False .&&. False =  False    
False .&&. True = False 

其中第二个第二个参数在任何一种情况下都被评估。

我被 OP 的主题误导了 "Operator & in haskell?"

对于那些在Haskell

中寻找 (&) 的人

&是Data.Function

中的反向应用运算符

(&) :: a -> (a -> b) -> b