module HaskellWorks.Data.BalancedParens.Internal.List ( chunkBy , toBools , toBalancedParensString ) where import Data.Word import qualified HaskellWorks.Data.BalancedParens.Internal.Word as W chunkBy :: Int -> [a] -> [[a]] chunkBy :: Int -> [a] -> [[a]] chunkBy Int n [a] bs = case Int -> [a] -> ([a], [a]) forall a. Int -> [a] -> ([a], [a]) splitAt Int n [a] bs of ([a] as, [a] zs) -> if [a] -> Bool forall (t :: * -> *) a. Foldable t => t a -> Bool null [a] zs then [[a] as] else [a] as[a] -> [[a]] -> [[a]] forall a. a -> [a] -> [a] :Int -> [a] -> [[a]] forall a. Int -> [a] -> [[a]] chunkBy Int n [a] zs toBoolsDiff :: [Word64] -> [Bool] -> [Bool] toBoolsDiff :: [Word64] -> [Bool] -> [Bool] toBoolsDiff = (Word64 -> ([Bool] -> [Bool]) -> [Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Word64] -> [Bool] -> [Bool] forall (t :: * -> *) a b. Foldable t => (a -> b -> b) -> b -> t a -> b foldr (([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c (.) (([Bool] -> [Bool]) -> ([Bool] -> [Bool]) -> [Bool] -> [Bool]) -> (Word64 -> [Bool] -> [Bool]) -> Word64 -> ([Bool] -> [Bool]) -> [Bool] -> [Bool] forall b c a. (b -> c) -> (a -> b) -> a -> c . Word64 -> [Bool] -> [Bool] W.toBoolsDiff) [Bool] -> [Bool] forall a. a -> a id toBools :: [Word64] -> [Bool] toBools :: [Word64] -> [Bool] toBools [Word64] ws = [Word64] -> [Bool] -> [Bool] toBoolsDiff [Word64] ws [] toBalancedParensString :: [Bool] -> String toBalancedParensString :: [Bool] -> String toBalancedParensString (Bool True:[Bool] bs) = Char '('Char -> String -> String forall a. a -> [a] -> [a] :[Bool] -> String toBalancedParensString [Bool] bs toBalancedParensString (Bool False:[Bool] bs) = Char ')'Char -> String -> String forall a. a -> [a] -> [a] :[Bool] -> String toBalancedParensString [Bool] bs toBalancedParensString [] = String ""