,h+    <Generate a frequency trigraph based on an english dictionary(c) Sean Gillespie, 2015 OtherLicense"Sean Gillespie <sean@mistersg.net> ExperimentalSafeKSearch for the character frequencies based on the first a two-letter stringA map of character frequencies, based on a dictionary. The key is a two-letter string, and the value is a list of probabilities (a-z). It's form is: [("aa", [2,0,3,0,0,0,1,0,0,0,0,1,1,1,0,0,0,3,2,0,0,0,0,0,0,0]), ... ("zz", [7,0,0,0,1,0,0,0,7,0,0,17,0,0,2,0,0,0,0,0,0,0,1,0,5,0])].Generate pronouncable, hard-to-guess passwords(c) Sean Gillespie, 2015 OtherLicense"Sean Gillespie <sean@mistersg.net> ExperimentalNone \Generate a password using the generator g, returning the result and the updated generator.  -- Generate a password of length 10 using the system generator myGenPassword :: IO (String, StdGen) myGenPassword = genPassword 10 `liftM` getStdGen Plural version of genPassword. Generates an infinite list of passwords using the generator g, returning the result and the updated generator. -- Generate 10 passwords of length 10 using the system generator myGenPasswords :: IO ([String], StdGen) myGenPasswords = ((ls, g) -> (take 10 ls, g)   genPasswords 10   getStdGen @Generate a password using the generator g, returning the result.  -- Generate a password of length 10 using the system generator myNewPassword :: IO String myNewPassword = newPassword 10 `liftM` getStdGen uPlural version of newPassword. Generates an infinite list of passwords using the generator g, returning the result -- Generate 10 passwords of length 10 using the system generator myNewPasswords :: IO [String] myNewPasswords = (take 10 . genPasswords 10)   getStdGen ]Generate a password using the MonadRandom m. MonadRandom is exposed here for extra control.  -- Generate a password of length 10 using the system generator myPasswords :: IO String myPasswords = evalRand (mkPassword 10) `liftM` getStdGen Plural version of mkPassword. Generate an infinite list of passwords using the MonadRandom m. MonadRandom is exposed here for extra control. -- Generate an infinite list of passwords of length 10 using the system generator myMkPasswords :: IO [String] myMkPasswords = evalRand (mkPasswords 10) `liftM` getStdGen )The alphabet we sample random values from Generate two random characters MGenerate a random character based on the previous two characters and their  IGenerate the last n characters using previous two characters and their  password lengthrandom generatorpassword lengthrandom generatorpassword lengthrandom generatorpassword lengthrandom generatorpassword lengthpassword length         elocr_EEWDwXukaBW2u9BUPQ79imData.Elocrypt.Trigraph Data.ElocryptElocrypt.Trigraphtrigraph findFrequency frequencies genPassword genPasswords newPassword newPasswords mkPassword mkPasswordsalphabetfirst2nextlastNbaseGHC.BaseliftM