ML3     <Generate a frequency trigraph based on an english dictionary(c) Sean Gillespie, 2015 OtherLicense"Sean Gillespie <sean@mistersg.net> ExperimentalSafe?Search for the character frequencies and return a weighted listKSearch for the character frequencies based on the first a two-letter stringFix frequencies if they are all 0, since MonadRandom prohibits this. In this case, use all 1s to give every item an equal weightA 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])]The two letter prefix.Generate pronouncable, hard-to-guess passwords(c) Sean Gillespie, 2015 OtherLicense"Sean Gillespie <sean@mistersg.net> ExperimentalSafedOptions for generating passwords or passphrases. Do not use this constructor directly. Instead use  to construct an instance.aDefault options for generating passwords or passphrases. This is the preferred way to construct .\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 genOptions `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) -> (ls, g)  genPasswords 10 10 genOptions  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 genOptions `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 = genPasswords 10 10 genOptions  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 myPassword :: IO String myPassword = evalRand (mkPassword 10 genOptions) `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 list of length 20 with passwords of length 10 using the system generator myMkPasswords :: IO [String] myMkPasswords = evalRand (mkPasswords 10 20 genOptions) `liftM` getStdGen ^Generate a passphrase using the generator g, returning the result and the updated generator.  -- Generate a passphrase of 10 words, each having a length between 6 and 12, -- using the system generator myGenPassphrase :: IO (String, StdGen) myGenPassphrase = genPassword 10 6 10 genOptions `liftM` getStdGen BGenerate a passphrase using the generator g, returning the result.  -- Generate a passphrase of 10 words, each having a length between 6 an 12, -- using the system generator. myNewPassphrase :: IO String myNewPassphrase = newPassphrase 10 6 12 `liftM` getStdGen <Generate a finite number of words of random length (between min and maxQ chars) using the MonadRandom m. MonadRandom is exposed here for extra control.  -- Generate a passphrase of 10 words, each having a length between 6 and 12. myPassphrase :: IO String myPassphrase = evalRand (mkPassphrase 10 6 12) `liftM` getStdGen %Generate two random characters. Uses  to generate a weighted list.IGenerate the last n characters using previous two characters and their MGenerate a random character based on the previous two characters and their *Randomly choose a letter from the trigraph/Randomly capitalize a character 10% of the timepassword lengthoptionsrandom generator password lengthnumber of passwordsoptionsrandom generator password lengthoptionsrandom generator password lengthnumber of passwordsoptionsrandom generator password lengthoptions password lengthnumber of passwordsoptionsnumber of wordsminimum word lengthmaximum word lengthoptionsrandom generatornumber of wordsminimum word lengthmaximum word lengthoptionsrandom generatornumber of wordsminimum word lengthmaximum word lengthoptionsoptions the prefix the prefix Whether to do the capitalizationThe character to capitalize          %elocrypt-2.0.0-A4zj04ax6OG4gubi4rPVGpData.Elocrypt.Trigraph Data.ElocryptElocrypt.Trigraphtrigraghtrigraph findWeights findFrequencydefaultFrequencies frequencies GenOptions genCapitals genOptions genPassword genPasswords newPassword newPasswords mkPassword mkPasswords genPassphrase newPassphrase mkPassphrasefirst2lastNnext nextLetter capitalizeR$fEqGenOptions$fShowGenOptionsbaseGHC.BaseliftM