Shared.hs (1311B)
1 module Feature.Generation.Shared where 2 3 import Data.Char (intToDigit, toLower, toUpper) 4 import System.Random (randomRIO) 5 6 -- Take a list of anything and return a random element from it 7 rIndex :: [a] -> IO a 8 rIndex arr = randomRIO (0, length arr - 1) 9 >>= (\i -> return $ arr !! i) 10 11 -- Return the input Char randomly uppercased or lowercased 12 rCap :: Char -> IO Char 13 rCap c = rIndex [True,False] >>= (\r -> return $ rCap' r c) 14 where 15 rCap' :: Bool -> Char -> Char 16 rCap' True c = toUpper c 17 rCap' False c = toLower c 18 19 -- Return a random character from validChars with random capitalization applied 20 rChar :: IO Char 21 rChar = rIndex validChars >>= rCap 22 23 -- Return a random character or symbol with random capitalization applied 24 rCharSym :: IO Char 25 rCharSym = rIndex (validChars <> validSymbols)>>= rCap 26 27 -- Takes any string and returns it in Titlecase 28 titleCase :: [Char] -> [Char] 29 titleCase [] = [] 30 titleCase x = toUpper (head x) : map toLower (tail x) 31 32 -- List of valid characters consisting of latin alphabet and numbers 33 validChars :: [Char] 34 validChars = validLetters <> fmap intToDigit validNumbers 35 36 validNumbers :: [Int] 37 validNumbers = [1..9] 38 39 validLetters :: [Char] 40 validLetters = ['a'..'z'] 41 42 validSymbols :: [Char] 43 validSymbols = ['!', '@', '#', '$', '%', '^', '&', '*']