module HaskellWorks.Data.BalancedParens.Internal.Word ( toBools , toBoolsDiff , partialToBoolsDiff ) where import Data.Word import HaskellWorks.Data.Bits.BitWise import HaskellWorks.Data.Positioning toBools :: Word64 -> [Bool] toBools :: Word64 -> [Bool] toBools Word64 w = Word64 -> [Bool] -> [Bool] toBoolsDiff Word64 w [] partialToBoolsDiff :: Count -> Word64 -> [Bool] -> [Bool] partialToBoolsDiff :: Word64 -> Word64 -> [Bool] -> [Bool] partialToBoolsDiff Word64 n Word64 w | Word64 n forall a. Ord a => a -> a -> Bool > Word64 0 = Word64 -> Word64 -> [Bool] -> [Bool] partialToBoolsDiff (Word64 n forall a. Num a => a -> a -> a - Word64 1) Word64 w forall b c a. (b -> c) -> (a -> b) -> a -> c . ((Word64 w forall a. TestBit a => a -> Position -> Bool .?. forall a b. (Integral a, Num b) => a -> b fromIntegral (Word64 n forall a. Num a => a -> a -> a - Word64 1))forall a. a -> [a] -> [a] :) partialToBoolsDiff Word64 0 Word64 _ = forall a. a -> a id partialToBoolsDiff Word64 _ Word64 _ = forall a. HasCallStack => [Char] -> a error [Char] "Invalid size" toBoolsDiff :: Word64 -> [Bool] -> [Bool] toBoolsDiff :: Word64 -> [Bool] -> [Bool] toBoolsDiff Word64 w = Position -> [Bool] -> [Bool] go Position 0x00 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x01 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x02 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x03 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x04 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x05 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x06 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x07 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x08 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x09 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x0a forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x0b forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x0c forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x0d forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x0e forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x0f forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x10 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x11 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x12 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x13 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x14 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x15 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x16 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x17 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x18 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x19 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x1a forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x1b forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x1c forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x1d forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x1e forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x1f forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x20 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x21 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x22 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x23 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x24 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x25 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x26 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x27 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x28 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x29 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x2a forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x2b forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x2c forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x2d forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x2e forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x2f forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x30 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x31 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x32 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x33 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x34 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x35 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x36 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x37 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x38 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x39 forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x3a forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x3b forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x3c forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x3d forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x3e forall b c a. (b -> c) -> (a -> b) -> a -> c . Position -> [Bool] -> [Bool] go Position 0x3f where go :: Position -> [Bool] -> [Bool] go :: Position -> [Bool] -> [Bool] go Position p = ((Word64 w forall a. TestBit a => a -> Position -> Bool .?. Position p)forall a. a -> [a] -> [a] :)