Make Natural's (.|.) really an OR operation (#9818)
authorHerbert Valerio Riedel <hvr@gnu.org>
Tue, 2 Dec 2014 16:51:36 +0000 (17:51 +0100)
committerHerbert Valerio Riedel <hvr@gnu.org>
Tue, 2 Dec 2014 16:51:42 +0000 (17:51 +0100)
Currently it's an AND when at least one of the operands is big.

Reviewed By: hvr

Differential Revision: https://phabricator.haskell.org/D549

libraries/base/GHC/Natural.hs

index 3519bcf..0211061 100644 (file)
@@ -296,9 +296,9 @@ instance Bits Natural where
     NatJ# n .&. NatJ# m = bigNatToNatural (andBigNat n m)
 
     NatS# n .|. NatS# m = wordToNatural (W# n .|. W# m)
-    NatS# n .|. NatJ# m = NatJ# (andBigNat (wordToBigNat n) m)
-    NatJ# n .|. NatS# m = NatJ# (andBigNat n (wordToBigNat m))
-    NatJ# n .|. NatJ# m = NatJ# (andBigNat n m)
+    NatS# n .|. NatJ# m = NatJ# (orBigNat (wordToBigNat n) m)
+    NatJ# n .|. NatS# m = NatJ# (orBigNat n (wordToBigNat m))
+    NatJ# n .|. NatJ# m = NatJ# (orBigNat n m)
 
     NatS# n `xor` NatS# m = wordToNatural (W# n `xor` W# m)
     NatS# n `xor` NatJ# m = NatJ# (xorBigNat (wordToBigNat n) m)