module Encoding.Rotate ( rotate ) where import Data.Maybe (fromMaybe) import Data.ByteString as B import qualified Data.ByteString.Char8 as BC upperCase = BC.pack ['A' .. 'Z'] lowerCase = BC.pack ['a' .. 'z'] -- rotate :: Int -> String -> String -- rotate n s = map (rotchar n) s -- where -- rotchar n c = -- case (lookup c $ transp n lowerCase) of -- Just x -> x -- Nothing -> fromMaybe c (lookup c $ transp n upperCase) rotate :: Int -> BC.ByteString -> BC.ByteString rotate n s = BC.map (rotchar n) s where rotchar :: Int -> Char -> Char rotchar n c = case (lookup c $ transp n lowerCase) of Just x -> x Nothing -> fromMaybe c (lookup c $ transp n upperCase) -- transp :: Int -> [Char] -> [(Char, Char)] -- transp n x = zip x ((drop n x) ++ (take n x)) transp :: Int -> BC.ByteString -> [(Char, Char)] transp n x = Prelude.zip (BC.unpack x) (BC.unpack $ BC.append (BC.drop n x) (BC.take n x))