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 :: forall a. Int -> [a] -> [[a]] chunkBy Int n [a] bs = case forall a. Int -> [a] -> ([a], [a]) splitAt Int n [a] bs of ([a] as, [a] zs) -> if forall (t :: * -> *) a. Foldable t => t a -> Bool null [a] zs then [[a] as] else [a] asforall a. a -> [a] -> [a] :forall a. Int -> [a] -> [[a]] chunkBy Int n [a] zs toBoolsDiff :: [Word64] -> [Bool] -> [Bool] toBoolsDiff :: [Word64] -> [Bool] -> [Bool] toBoolsDiff = forall (t :: * -> *) a b. Foldable t => (a -> b -> b) -> b -> t a -> b foldr (forall b c a. (b -> c) -> (a -> b) -> a -> c (.) forall b c a. (b -> c) -> (a -> b) -> a -> c . Word64 -> [Bool] -> [Bool] W.toBoolsDiff) 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 '('forall a. a -> [a] -> [a] :[Bool] -> String toBalancedParensString [Bool] bs toBalancedParensString (Bool False:[Bool] bs) = Char ')'forall a. a -> [a] -> [a] :[Bool] -> String toBalancedParensString [Bool] bs toBalancedParensString [] = String ""