module Encoding.Base2 ( enc2 , dec2 ) where import Data.Char (ord, chr, digitToInt, intToDigit) binaryToChar :: String -> Char binaryToChar binStr = chr $ binaryToInt binStr binaryToInt :: String -> Int binaryToInt binStr = Prelude.foldl (\acc x -> acc * 2 + digitToInt x) 0 binStr dec2 :: String -> String dec2 input = map binaryToChar $ words input charToBinary :: Char -> String charToBinary char = let binaryStr = intToBinary $ ord char in replicate (7 - Prelude.length binaryStr) '0' ++ binaryStr intToBinary :: Int -> String intToBinary n = reverse $ decimalToBinary' n where decimalToBinary' 0 = "0" decimalToBinary' m = let (q, r) = m `divMod` 2 in intToDigit r : decimalToBinary' q enc2 :: String -> String enc2 input = unwords $ map charToBinary input