module BitArray.Parser where import BitArray.Prelude import Text.ParserCombinators.ReadP import Data.Char digits :: ReadP [Char] digits = munch isDigit bitIndexes :: ReadP [Int] bitIndexes = do digitsChars <- digits sequence $ do (index, char) <- zip [0..] (reverse digitsChars) case char of '0' -> empty '1' -> return (return index) _ -> return empty bits :: (Bits a, Num a) => ReadP a bits = foldr (.|.) 0 . map bit <$> bitIndexes