大文字・小文字の反転(その1)

[id:mzp:20090804#invert]

変換関数を直接作るなら,こんな感じかな.

import Control.Arrow

lowers = ['a'..'z']
uppers = ['A'..'Z']

exFun :: Eq a => (a,b) -> (a -> b) -> a -> b
exFun (x,y) f x' = if x == x' then y else f x'

invertChar :: Char -> Char
invertChar = foldr exFun id $ zip lowers uppers ++ zip uppers lowers

invertString :: String -> String
invertString = map invertChar