import Data.Char (chr, isAlpha, ord, toLower) import Data.Bool (bool) rot13 :: Char -> Char rot13 = let rot = flip ((bool (-) (+) . ('m' >=) . toLower) <*> ord) in (bool <*> chr . rot 13) <*> isAlpha -- Simple test main :: IO () main = print $ rot13 <$> "Abjurer nowhere"