You can compare functions below with the Objective Caml version.
let inc = (+) n -- Alternative: let inc n = succ n
-- Shifts a character to the right if positive, left if negative. shift :: Int -> Char -> Char shift n c | isUpper c = chr $ ord 'A' + ((ord c + n - ord 'A') `mod` 26) | isLower c = chr $ ord 'a' + ((ord c + n - ord 'a') `mod` 26) | otherwise = c encode :: Int -> String -> String encode _ [] = [] encode n xs = map (shift n) xs