Enumクラスのメソッドsucc, pred使うとシーザー暗号簡単に書けそうですよね。 succはsuccessorの略で、次に続く値を返してくれます。 数値の場合はインクリメントした値を返します。 predはpredesessorですね。数値ではデクリメントした値を返します。 caesarCipher' = map succ main = putStrLn $ caesarCipher' "abcde" -- => bcdef しかしsucc 'z'しても'a'にはなりません。 main = putStrLn $ caesarCipher' "zzzz" -- => {{{{{ では(succ 'z' == 'a')となってくれるようなCircularCharを定義すれば良さそうですね。 そうすればsuccで簡単にシーザー暗号書けるはずです。 newtype CircularChar =