Вопрос не очень хорошо написан, вы не объясните, где ваша проблема.
Вы можете начать с чего-то вроде этого
import Data.Char
toAnimal :: Char -> Char
toAnimal c = chr . (+127970) $ ord c
toSmileyEmoji :: Char-> Char
toSmileyEmoji c = chr . (+128415) $ ord c
encode :: String -> String
encode xs = map (\c -> if isUpper c then toAnimal c else toSmileyEmoji c) xs
fromAnimal :: Char -> Char
fromAnimal c = chr $ (ord c) - 127970
fromSmileyEmoji :: Char-> Char
fromSmileyEmoji c = chr $ (ord c) - 128415
isAnimal :: Char -> Bool
isAnimal c = if ((ord c >= ord '?') && (ord c <= ord '?')) then True else False
decode :: String -> String
decode xs = map (\c -> if isAnimal c then fromAnimal c else fromSmileyEmoji c) xs
main = do
contents1 <- getLine
contents2 <- getLine
putStr $ (encode contents1) ++ "\n" ++ (decode contents2)
Ввод
ABCDEFGHIJKLMNOPQRSTUVWXYZ
??????????????????????????
Выход
??????????????????????????
ABCDEFGHIJKLMNOPQRSTUVWXYZ
https://ideone.com/iePD1a
Смайлики смайликов начинаются с 128512, а смайлики животных начинаются с 128045 (ну, нереальное фактическое «начало», но, по крайней мере, оно может соответствовать букве алфавита). ASCII строчные буквы начинаются с 97 и 65 для прописных. Вам нужно только добавить его, чтобы он стал смайликом, который вы желаете
например
65 [A] + (128045 [?] - 65 [A]) = 128045 [?]
and so on...