module Test.RandomStrings.FlipCase
( flipCase
, flipCaseString
, randomFlipCase
, randomFlipCaseString
)
where
import Data.Bool ( bool )
import Data.Char
import Data.Ratio
import Control.Monad
import System.Random
import Test.RandomStrings.Internal
flipCase :: Char -> Char
flipCase c
| isUpper c = toLower c
| isLower c = toUpper c
| otherwise = c
flipCaseString :: String -> String
flipCaseString = map flipCase
randomFlipCase
:: Rational
-> Char
-> IO Char
randomFlipCase r c = randomBool r >>= bool (return c) (return $ flipCase c)
randomFlipCaseString
:: Rational
-> String
-> IO String
randomFlipCaseString r = mapM (randomFlipCase r)