import Data.Char (digitToInt, chr) import Data.List (intercalate, foldl') charFromBool :: Bool -> Char charFromBool True = '1' charFromBool _ = '0' charToString char = [char] decode :: [Bool] -> String decode bools = intercalate "" $ map charToString $ map charFromBool bools bytesToInt = foldl' (\acc x -> 2 * acc + digitToInt x) 0 toChar bools = chr $ bytesToInt $ decode bools process bitList = intercalate "" $ map charToString $ map toChar bitList string = [ [False, True, False, False, True, False, False, False], -- H [False, True, True, False, False, True, False, True], -- E [False, True, True, False, True, True, False, False], -- L [False, True, True, False, True, True, False, False], -- L [False, True, True, False, True, True, True, True], -- O [False, False, True, False, False, False, False, False], -- ' ' [False, True, False, True, False, True, True, True], -- W [False, True, True, False, True, True, True, True], -- O [False, True, True, True, False, False, True, False], -- R [False, True, True, False, True, True, False, False], -- L [False, True, True, False, False, True, False, False] -- D ] main = putStrLn $ process string