packages feed

fake (empty) → 0.1

raw patch · 20 files changed

+2895/−0 lines, 20 filesdep +basedep +containersdep +generics-sopsetup-changed

Dependencies added: base, containers, generics-sop, hspec, random, text, time

Files

+ ChangeLog.md view
@@ -0,0 +1,5 @@+# Revision history for fake++## 0.1  -- 2018-03-14++* First version. Released on an unsuspecting world.
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright (c) 2017, Doug Beardsley+Copyright (c) 2017, Formation Inc.+All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++    * Redistributions of source code must retain the above copyright+      notice, this list of conditions and the following disclaimer.++    * Redistributions in binary form must reproduce the above+      copyright notice, this list of conditions and the following+      disclaimer in the documentation and/or other materials provided+      with the distribution.++    * Neither the name of Doug Beardsley nor the names of other+      contributors may be used to endorse or promote products derived+      from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ fake.cabal view
@@ -0,0 +1,79 @@+name:                fake+version:             0.1+synopsis:            Randomly generated fake data+description:         QuickCheck generates completely random data for the+                     purposes of test and catching corner cases.  The fake+                     package provides tools for generating data that looks+                     plausibly real.+license:             BSD3+license-file:        LICENSE+author:              Doug Beardsley+maintainer:          mightybyte@gmail.com+copyright:           Doug Beardsley, Formation Inc.+homepage:            https://github.com/mightybyte/fake+bug-reports:         https://github.com/mightybyte/fake/issues+category:            Data+build-type:          Simple+extra-source-files:  ChangeLog.md+cabal-version:       >=1.10+tested-with:+  GHC==7.10.3,+  GHC==8.0.2,+  GHC==8.2.1,+  GHC==8.4.1++Source-repository head+  Type:     git+  Location: https://github.com/mightybyte/fake.git++library+  exposed-modules:+    Fake+    Fake.Class+    Fake.Combinators+    Fake.Cover+    Fake.Provider.Address.EN_US+    Fake.Provider.DateTime+    Fake.Provider.IdNumber.EN_US+    Fake.Provider.Lang+    Fake.Provider.Lang.EN_US+    Fake.Provider.Locale+    Fake.Provider.Person.EN_US+    Fake.Provider.PhoneNumber.EN_US+    Fake.Provider.UserAgent+    Fake.Utils++  other-modules:    Fake.Types++  build-depends:+    base         >= 4.6 && < 4.12,+    containers   >= 0.5 && < 0.6,+    generics-sop >= 0.2 && < 0.4,+    random       >= 1.1 && < 1.2,+    text         >= 1.2 && < 1.3,+    time         >= 1.4 && < 1.10++  ghc-options: -Wall+  hs-source-dirs:      src+  default-language:    Haskell2010++test-suite spec+  type: exitcode-stdio-1.0+  main-is: Main.hs+  hs-source-dirs: test, src+  other-modules:+    Fake.Class+    Fake.Combinators+    Fake.Cover+    Fake.Provider.Lang+    Fake.Provider.Person.EN_US+    Fake.Types++  build-depends:+    base,+    hspec >= 2.4 && < 2.5,+    random,+    text,+    time+  ghc-options: -Wall -threaded -fno-warn-partial-type-signatures+  default-language:    Haskell2010
+ src/Fake.hs view
@@ -0,0 +1,14 @@+module Fake+  ( module Fake.Class+  , module Fake.Combinators+  , module Fake.Cover+  , module Fake.Types+  , module Fake.Utils+  ) where++import Fake.Class+import Fake.Combinators+import Fake.Cover+import Fake.Types+import Fake.Utils+
+ src/Fake/Class.hs view
@@ -0,0 +1,53 @@+module Fake.Class where++------------------------------------------------------------------------------+import Control.Monad+import Fake.Combinators+import Fake.Types+------------------------------------------------------------------------------++------------------------------------------------------------------------------+-- | Random generation of fake values.+class Fake a where+    -- | A generator for values of the given type.+    fake :: FGen a++instance Fake () where+    fake = return ()++instance Fake Bool where+    fake = fromRange (False,True)++instance Fake Ordering where+    fake = elements [LT, EQ, GT]++instance Fake a => Fake (Maybe a) where+    fake = frequency [(1, return Nothing), (3, liftM Just fake)]++instance (Fake a, Fake b) => Fake (Either a b) where+    fake = oneof [liftM Left fake, liftM Right fake]++instance (Fake a, Fake b) => Fake (a,b) where+    fake = liftM2 (,) fake fake++instance (Fake a, Fake b, Fake c) => Fake (a,b,c) where+    fake = liftM3 (,,) fake fake fake++instance (Fake a, Fake b, Fake c, Fake d) => Fake (a,b,c,d) where+    fake = liftM4 (,,,) fake fake fake fake++instance (Fake a, Fake b, Fake c, Fake d, Fake e) => Fake (a,b,c,d,e) where+    fake = liftM5 (,,,,) fake fake fake fake fake++instance (Fake a, Fake b, Fake c, Fake d, Fake e, Fake f)+      => Fake (a,b,c,d,e,f) where+    fake = return (,,,,,)+          <*> fake <*> fake <*> fake <*> fake <*> fake <*> fake++instance (Fake a, Fake b, Fake c, Fake d, Fake e, Fake f, Fake g)+      => Fake (a,b,c,d,e,f,g) where+    fake = return (,,,,,,)+          <*> fake <*> fake <*> fake <*> fake <*> fake <*> fake <*> fake++-- GHC only has Generic instances up to 7-tuples+
+ src/Fake/Combinators.hs view
@@ -0,0 +1,167 @@+module Fake.Combinators where++------------------------------------------------------------------------------+import Control.Monad+import Data.List+import Data.Ord+import System.Random+------------------------------------------------------------------------------+import Fake.Types+------------------------------------------------------------------------------++------------------------------------------------------------------------------+-- ** Common generators and combinators++------------------------------------------------------------------------------+-- | Generates a random element in the given inclusive range.+fromRange :: Random a => (a,a) -> FGen a+fromRange rng = MkFGen (\r -> let (x,_) = randomR rng r in x)+++------------------------------------------------------------------------------+-- | Generates a random element over the natural range of `a`.+pickAny :: Random a => FGen a+pickAny = MkFGen (\r -> let (x,_) = random r in x)+++------------------------------------------------------------------------------+-- | Generates a value that satisfies a predicate.+suchThat :: FGen a -> (a -> Bool) -> FGen a+gen `suchThat` p =+  do mx <- gen `suchThatMaybe` p+     case mx of+       Just x  -> return x+       Nothing -> gen `suchThat` p+++------------------------------------------------------------------------------+-- | Tries to generate a value that satisfies a predicate.+suchThatMaybe :: FGen a -> (a -> Bool) -> FGen (Maybe a)+gen `suchThatMaybe` p = do+    x <- gen+    return $ if p x then Just x else Nothing+++------------------------------------------------------------------------------+-- | Randomly uses one of the given generators. The input list+-- must be non-empty.+oneof :: [FGen a] -> FGen a+oneof [] = error "Fake.oneof used with empty list"+oneof gs = fromRange (0,length gs - 1) >>= (gs !!)+++------------------------------------------------------------------------------+-- | Chooses one of the given generators, with a weighted random distribution.+-- The input list must be non-empty.+frequency :: [(Int, FGen a)] -> FGen a+frequency [] = error "Fake.frequency used with empty list"+frequency xs0 = fromRange (1, tot) >>= (`pick` xs0)+ where+  tot = sum (map fst xs0)++  pick n ((k,x):xs)+    | n <= k    = x+    | otherwise = pick (n-k) xs+  pick _ _  = error "Fake.pick used with empty list"+++------------------------------------------------------------------------------+-- | Generates one of the given values. The input list must be non-empty.+elements :: [a] -> FGen a+elements [] = error "Fake.element used with empty list"+elements xs = (xs !!) `fmap` fromRange (0, length xs - 1)+++------------------------------------------------------------------------------+-- | Generates a random subsequence of the given list.+sublistOf :: [a] -> FGen [a]+sublistOf = filterM (\_ -> fromRange (False, True))+++------------------------------------------------------------------------------+-- | Generates a random permutation of the given list.+shuffle :: [a] -> FGen [a]+shuffle xs = do+  ns <- vectorOf (length xs) (fromRange (minBound :: Int, maxBound))+  return (map snd (sortBy (comparing fst) (zip ns xs)))+++------------------------------------------------------------------------------+-- | Generates a list of random length.+listUpTo :: Int -> FGen a -> FGen [a]+listUpTo n gen = do+    k <- fromRange (0,n)+    vectorOf k gen+++------------------------------------------------------------------------------+-- | Generates a non-empty list of random length. The maximum length+-- depends on the size parameter.+listUpTo1 :: Int -> FGen a -> FGen [a]+listUpTo1 n gen = do+    k <- fromRange (1,1 `max` n)+    vectorOf k gen+++------------------------------------------------------------------------------+-- | Generates a list of the given length.+vectorOf :: Int -> FGen a -> FGen [a]+vectorOf = replicateM+++------------------------------------------------------------------------------+-- | Generates an infinite list.+infiniteListOf :: FGen a -> FGen [a]+infiniteListOf gen = sequence (repeat gen)+++------------------------------------------------------------------------------+-- | Generates an ordered list.+orderedList :: (Ord a) => Int -> FGen a -> FGen [a]+orderedList n gen = sort <$> listUpTo n gen+++------------------------------------------------------------------------------+-- | Generate a value of an enumeration in the range [from, to].+fakeEnumFromTo :: Enum a => a -> a -> FGen a+fakeEnumFromTo from to =+    toEnum <$> fromRange (fromEnum from, fromEnum to)+++------------------------------------------------------------------------------+-- | Generate a value of an enumeration in the range [minBound, maxBound].+fakeEnum :: (Enum a, Bounded a) => FGen a+fakeEnum = fakeEnumFromTo minBound maxBound+++------------------------------------------------------------------------------+-- | 'fakeEnumFromTo' specialized to Int.+fakeInt :: Int -> Int -> FGen Int+fakeInt = fakeEnumFromTo+++------------------------------------------------------------------------------+-- | 'fakeEnumFromTo' specialized to Int.+fakeDouble :: Double -> Double -> FGen Double+fakeDouble a b = fromRange (a,b)+++------------------------------------------------------------------------------+fakeDigit :: FGen Char+fakeDigit = fakeEnumFromTo '0' '9'+++------------------------------------------------------------------------------+fakeDigitNonzero :: FGen Char+fakeDigitNonzero = fakeEnumFromTo '1' '9'+++------------------------------------------------------------------------------+fakeLetter :: FGen Char+fakeLetter = fakeEnumFromTo 'a' 'z'+++------------------------------------------------------------------------------+fakeCapitalLetter :: FGen Char+fakeCapitalLetter = fakeEnumFromTo 'A' 'A'+
+ src/Fake/Cover.hs view
@@ -0,0 +1,145 @@+{-# LANGUAGE CPP                  #-}+{-# LANGUAGE DataKinds            #-}+{-# LANGUAGE DefaultSignatures    #-}+{-# LANGUAGE DeriveFunctor        #-}+{-# LANGUAGE DeriveGeneric        #-}+{-# LANGUAGE FlexibleContexts     #-}+{-# LANGUAGE RankNTypes           #-}+{-# LANGUAGE ScopedTypeVariables  #-}+{-# LANGUAGE TypeFamilies         #-}+{-# LANGUAGE TypeOperators        #-}+{-# LANGUAGE UndecidableInstances #-}++-- | Generate fake values with full constructor coverage+--+-- The idea behind Fake.Cover is that although exhaustive testing is highly+-- exponential, you can cover a large portion of the likely problem cases by+-- exercising all the constructors of a data type and associated fields. This+-- approach only requires a sub-exponential number of cases--far fewer than what+-- you need for the exhaustive approach. The number of test cases needed to+-- ensure that you have full coverage of all the constructors is given by the+-- following relations for product and sum types:+--+-- numCases (a, b) = max (numCases a) (numCases b)+--+-- numCases (Either a b) = numCases a + numCases b+--+-- See the test suite for examples of how many values are generated for+-- different data types.+module Fake.Cover+  ( gcover+  , Coverage(..)+  , Cover(..)+  ) where++------------------------------------------------------------------------------+import Control.Applicative+import Control.Monad+import GHC.Generics as G+------------------------------------------------------------------------------+import Fake.Types+------------------------------------------------------------------------------+++------------------------------------------------------------------------------+-- | Coverage is a list of values, implemented here with a newtype around a+-- list of fake value generators.  It's @[FGen a]@ instead of @FGen [a]@+-- because we don't want to have to evaluate the 'FGen' monad to work with+-- coverage lists.+newtype Coverage a = Coverage { unCoverage :: [FGen a] }+  deriving (Functor)++instance Applicative Coverage where+  pure = Coverage . pure . pure+  Coverage as <*> Coverage bs = Coverage $ zipWith (<*>)+     (as ++ take (newlen - alen) (cycle as))+     (bs ++ take (newlen - blen) (cycle bs))+   where+    alen = length as+    blen = length bs+    newlen = max alen blen++instance Alternative Coverage where+  empty = Coverage empty+  Coverage as <|> Coverage bs = Coverage (as ++ bs)+++------------------------------------------------------------------------------+-- | A type class that generates a list of values giving full construcor+-- coverage for data types.  You can write your own instances by hand or you+-- can use the default instance which calls 'gcover' provided your data type+-- has a Generic instance.+class Cover a where+    cover :: Coverage a+    default cover :: (Generic a, GCover ga, ga ~ G.Rep a) => Coverage a+    cover = gcover++instance Cover () where+    cover = gcover++instance Cover a => Cover (Maybe a) where+    cover = gcover++instance (Cover a, Cover b) => Cover (Either a b) where+    cover = gcover++instance (Cover a, Cover b) => Cover (a,b) where+    cover = gcover++instance (Cover a, Cover b, Cover c) => Cover (a,b,c) where+    cover = gcover++instance (Cover a, Cover b, Cover c, Cover d) => Cover (a,b,c,d) where+    cover = gcover++instance (Cover a, Cover b, Cover c, Cover d, Cover e)+      => Cover (a,b,c,d,e) where+    cover = gcover++instance (Cover a, Cover b, Cover c, Cover d, Cover e, Cover f)+      => Cover (a,b,c,d,e,f) where+    cover = gcover++instance (Cover a, Cover b, Cover c, Cover d, Cover e, Cover f, Cover g)+      => Cover (a,b,c,d,e,f,g) where+    cover = gcover+-- GHC only has Generic instances up to 7-tuples+++------------------------------------------------------------------------------+-- | A generic function that gives you full constructor coverage for a data+-- type.  Using this function as the 'Cover' instance for a data type avoids+-- the need to explicitly enumerate values that include coverage of all+-- constructors.+gcover :: (Generic a, GCover ga, ga ~ G.Rep a) => Coverage a+gcover = Coverage $ fmap G.to <$> genericCover+++------------------------------------------------------------------------------+-- | Used to implement 'gcover'.+class GCover a where+    genericCover :: [FGen (a x)]++instance GCover G.U1 where+    genericCover = pure $ pure G.U1++instance Cover c => GCover (G.K1 i c) where+    genericCover = fmap G.K1 <$> unCoverage cover++instance GCover f => GCover (G.M1 i c f) where+    genericCover = fmap G.M1 <$> genericCover++instance (GCover a, GCover b) => GCover (a G.:*: b) where+    genericCover = zipWith (liftM2 (G.:*:))+                     (acover ++ take (newlen - alen) (cycle acover))+                     (bcover ++ take (newlen - blen) (cycle bcover))+      where+        acover = genericCover :: [FGen (a x)]+        alen = length acover+        bcover = genericCover :: [FGen (b x)]+        blen = length bcover+        newlen = max alen blen++instance (GCover a, GCover b) => GCover (a G.:+: b) where+    genericCover = fmap (fmap G.L1) genericCover +++                   fmap (fmap G.R1) genericCover
+ src/Fake/Provider/Address/EN_US.hs view
@@ -0,0 +1,320 @@+{-# LANGUAGE DeriveGeneric     #-}+{-# LANGUAGE OverloadedStrings #-}++-- | Generate fake US addresses.+module Fake.Provider.Address.EN_US where++------------------------------------------------------------------------------+import           Data.Map (Map)+import qualified Data.Map as M+import           Data.Maybe+import           Data.Text (Text)+import qualified Data.Text as T+import           GHC.Generics+import           Text.Printf+------------------------------------------------------------------------------+import           Fake+import           Fake.Provider.Lang+import           Fake.Provider.Person.EN_US+------------------------------------------------------------------------------+++------------------------------------------------------------------------------+-- | Generates a fake address.+fakeAddress :: FGen Text+fakeAddress = do+    street <- fakeStreet+    s <- fakeState+    c <- fakeCityInState s+    z <- fakeZipInState s+    return $ T.pack $ printf "%s\n%s, %s %s" street c (stateAbbreviation s) z+++------------------------------------------------------------------------------+-- | Generates a fake street component consisting of building number, street+-- name, and optional secondary suite or apartment number.+fakeStreet :: FGen Text+fakeStreet = do+    buildingNumber <- fakeInt 100 99999+    street <- fakeStreetName+    secondary <- oneof+      [ T.pack . printf "Apt. %d" <$> fakeInt 100 999+      , T.pack . printf "Suite %d" <$> fakeInt 100 999+      ]+    elements $ map T.pack+      [ printf "%d %s" buildingNumber street+      , printf "%d %s\n%s" buildingNumber street secondary+      ]+++------------------------------------------------------------------------------+-- | Generates fake street names.+fakeStreetName :: FGen Text+fakeStreetName =+    fmap T.pack $ printf "%s %s"+      <$> fmap unSingleWord (oneof [firstName, lastName])+      <*> fakeStreetSuffix+++------------------------------------------------------------------------------+-- | Generates fake US state.+fakeState :: FGen UsState+fakeState = fakeEnum+++------------------------------------------------------------------------------+-- | Generates a fake city in a US state.  These are generated from a list of+-- actual US cities in each state.+fakeCityInState :: UsState -> FGen Text+fakeCityInState s = elements $ fromJust $ M.lookup s usCities+++------------------------------------------------------------------------------+-- | Generates a fake zip code in a US state.  Generated zip codes should+-- actually be valid for the given state.+fakeZipInState :: UsState -> FGen Text+fakeZipInState s = fakeNumberScheme $ stateZipFormat s+++------------------------------------------------------------------------------+-- | Generates a fake street suffix, e.g. road, street, avenue, etc.+fakeStreetSuffix :: FGen Text+fakeStreetSuffix = elements+    [ "Avenue"+    , "Circle"+    , "Court"+    , "Crescent"+    , "Drive"+    , "Lane"+    , "Pike"+    , "Place"+    , "Plaza"+    , "Road"+    , "Street"+    , "Terrace"+    , "Trail"+    , "Way"+    ]+++------------------------------------------------------------------------------+-- | Enumeration of the fifty US states.+data UsState+  = Alabama+  | Alaska+  | Arizona+  | Arkansas+  | California+  | Colorado+  | Connecticut+  | Delaware+  | Florida+  | Georgia+  | Hawaii+  | Idaho+  | Illinois+  | Indiana+  | Iowa+  | Kansas+  | Kentucky+  | Louisiana+  | Maine+  | Maryland+  | Massachusetts+  | Michigan+  | Minnesota+  | Mississippi+  | Missouri+  | Montana+  | Nebraska+  | Nevada+  | NewHampshire+  | NewJersey+  | NewMexico+  | NewYork+  | NorthCarolina+  | NorthDakota+  | Ohio+  | Oklahoma+  | Oregon+  | Pennsylvania+  | RhodeIsland+  | SouthCarolina+  | SouthDakota+  | Tennessee+  | Texas+  | Utah+  | Vermont+  | Virginia+  | Washington+  | WestVirginia+  | Wisconsin+  | Wyoming+  deriving (Eq,Ord,Read,Show,Enum,Bounded,Generic)+++------------------------------------------------------------------------------+-- | Returns the two-character abbreviation for the given US state.+stateAbbreviation :: UsState -> Text+stateAbbreviation Alabama = "AL"+stateAbbreviation Alaska = "AK"+stateAbbreviation Arizona = "AZ"+stateAbbreviation Arkansas = "AR"+stateAbbreviation California = "CA"+stateAbbreviation Colorado = "CO"+stateAbbreviation Connecticut = "CT"+stateAbbreviation Delaware = "DE"+stateAbbreviation Florida = "FL"+stateAbbreviation Georgia = "GA"+stateAbbreviation Hawaii = "HI"+stateAbbreviation Idaho = "ID"+stateAbbreviation Illinois = "IL"+stateAbbreviation Indiana = "IN"+stateAbbreviation Iowa = "IA"+stateAbbreviation Kansas = "KS"+stateAbbreviation Kentucky = "KY"+stateAbbreviation Louisiana = "LA"+stateAbbreviation Maine = "ME"+stateAbbreviation Maryland = "MD"+stateAbbreviation Massachusetts = "MA"+stateAbbreviation Michigan = "MI"+stateAbbreviation Minnesota = "MN"+stateAbbreviation Mississippi = "MS"+stateAbbreviation Missouri = "MO"+stateAbbreviation Montana = "MT"+stateAbbreviation Nebraska = "NE"+stateAbbreviation Nevada = "NV"+stateAbbreviation NewHampshire = "NH"+stateAbbreviation NewJersey = "NJ"+stateAbbreviation NewMexico = "NM"+stateAbbreviation NewYork = "NY"+stateAbbreviation NorthCarolina = "NC"+stateAbbreviation NorthDakota = "ND"+stateAbbreviation Ohio = "OH"+stateAbbreviation Oklahoma = "OK"+stateAbbreviation Oregon = "OR"+stateAbbreviation Pennsylvania = "PA"+stateAbbreviation RhodeIsland = "RI"+stateAbbreviation SouthCarolina = "SC"+stateAbbreviation SouthDakota = "SD"+stateAbbreviation Tennessee = "TN"+stateAbbreviation Texas = "TX"+stateAbbreviation Utah = "UT"+stateAbbreviation Vermont = "VT"+stateAbbreviation Virginia = "VA"+stateAbbreviation Washington = "WA"+stateAbbreviation WestVirginia = "WV"+stateAbbreviation Wisconsin = "WI"+stateAbbreviation Wyoming = "WY"+++------------------------------------------------------------------------------+-- | Returns the two-character abbreviation for the given US state.+stateZipFormat :: UsState -> NumberScheme+stateZipFormat Alabama = NumberScheme "350##"+stateZipFormat Alaska = NumberScheme "995##"+stateZipFormat Arizona = NumberScheme "850##"+stateZipFormat Arkansas = NumberScheme "717##"+stateZipFormat California = NumberScheme "900##"+stateZipFormat Colorado = NumberScheme "800##"+stateZipFormat Connecticut = NumberScheme "061##"+stateZipFormat Delaware = NumberScheme "198##"+stateZipFormat Florida = NumberScheme "322##"+stateZipFormat Georgia = NumberScheme "301##"+stateZipFormat Hawaii = NumberScheme "967##"+stateZipFormat Idaho = NumberScheme "832##"+stateZipFormat Illinois = NumberScheme "600##"+stateZipFormat Indiana = NumberScheme "463##"+stateZipFormat Iowa = NumberScheme "510##"+stateZipFormat Kansas = NumberScheme "666##"+stateZipFormat Kentucky = NumberScheme "404##"+stateZipFormat Louisiana = NumberScheme "701##"+stateZipFormat Maine = NumberScheme "042##"+stateZipFormat Maryland = NumberScheme "210##"+stateZipFormat Massachusetts = NumberScheme "026##"+stateZipFormat Michigan = NumberScheme "480##"+stateZipFormat Minnesota = NumberScheme "555##"+stateZipFormat Mississippi = NumberScheme "387##"+stateZipFormat Missouri = NumberScheme "650##"+stateZipFormat Montana = NumberScheme "590##"+stateZipFormat Nebraska = NumberScheme "688##"+stateZipFormat Nevada = NumberScheme "898##"+stateZipFormat NewHampshire = NumberScheme "036##"+stateZipFormat NewJersey = NumberScheme "076##"+stateZipFormat NewMexico = NumberScheme "880##"+stateZipFormat NewYork = NumberScheme "122##"+stateZipFormat NorthCarolina = NumberScheme "288##"+stateZipFormat NorthDakota = NumberScheme "586##"+stateZipFormat Ohio = NumberScheme "444##"+stateZipFormat Oklahoma = NumberScheme "730##"+stateZipFormat Oregon = NumberScheme "979##"+stateZipFormat Pennsylvania = NumberScheme "186##"+stateZipFormat RhodeIsland = NumberScheme "029##"+stateZipFormat SouthCarolina = NumberScheme "299##"+stateZipFormat SouthDakota = NumberScheme "577##"+stateZipFormat Tennessee = NumberScheme "383##"+stateZipFormat Texas = NumberScheme "798##"+stateZipFormat Utah = NumberScheme "847##"+stateZipFormat Vermont = NumberScheme "050##"+stateZipFormat Virginia = NumberScheme "222##"+stateZipFormat Washington = NumberScheme "990##"+stateZipFormat WestVirginia = NumberScheme "247##"+stateZipFormat Wisconsin = NumberScheme "549##"+stateZipFormat Wyoming = NumberScheme "831##"+++------------------------------------------------------------------------------+-- | Map of actual cities in each US state.+usCities :: Map UsState [Text]+usCities = M.fromList+    [ (Alabama, ["Alexander City" , "Andalusia" , "Anniston" , "Athens" , "Atmore" , "Auburn" , "Bessemer" , "Birmingham" , "Chickasaw" , "Clanton" , "Cullman" , "Decatur" , "Demopolis" , "Dothan" , "Enterprise" , "Eufaula" , "Florence" , "Fort Payne" , "Gadsden" , "Greenville" , "Guntersville" , "Huntsville" , "Jasper" , "Marion" , "Mobile" , "Montgomery" , "Opelika" , "Ozark" , "Phenix City" , "Prichard" , "Scottsboro" , "Selma" , "Sheffield" , "Sylacauga" , "Talladega" , "Troy" , "Tuscaloosa" , "Tuscumbia" , "Tuskegee"])+    , (Alaska, ["Anchorage" , "Cordova" , "Fairbanks" , "Haines" , "Homer" , "Juneau" , "Ketchikan" , "Kodiak" , "Kotzebue" , "Nome" , "Palmer" , "Seward" , "Sitka" , "Skagway" , "Valdez"])+    , (Arizona, ["Ajo" , "Avondale" , "Bisbee" , "Casa Grande" , "Chandler" , "Clifton" , "Douglas" , "Flagstaff" , "Florence" , "Gila Bend" , "Glendale" , "Globe" , "Kingman" , "Lake Havasu City" , "Mesa" , "Nogales" , "Oraibi" , "Phoenix" , "Prescott" , "Scottsdale" , "Sierra Vista" , "Tempe" , "Tombstone" , "Tucson" , "Walpi" , "Window Rock" , "Winslow" , "Yuma"])+    , (Arkansas, ["Arkadelphia" , "Arkansas Post" , "Batesville" , "Benton" , "Blytheville" , "Camden" , "Conway" , "Crossett" , "El Dorado" , "Fayetteville" , "Forrest City" , "Fort Smith" , "Harrison" , "Helena" , "Hope" , "Hot Springs" , "Jacksonville" , "Jonesboro" , "Little Rock" , "Magnolia" , "Morrilton" , "Newport" , "North Little Rock" , "Osceola" , "Pine Bluff" , "Rogers" , "Searcy" , "Stuttgart" , "Van Buren" , "West Memphis"])+    , (California, ["Alameda" , "Alhambra" , "Anaheim" , "Antioch" , "Arcadia" , "Bakersfield" , "Barstow" , "Belmont" , "Berkeley" , "Beverly Hills" , "Brea" , "Buena Park" , "Burbank" , "Calexico" , "Calistoga" , "Carlsbad" , "Carmel" , "Chico" , "Chula Vista" , "Claremont" , "Compton" , "Concord" , "Corona" , "Coronado" , "Costa Mesa" , "Culver City" , "Daly City" , "Davis" , "Downey" , "El Centro" , "El Cerrito" , "El Monte" , "Escondido" , "Eureka" , "Fairfield" , "Fontana" , "Fremont" , "Fresno" , "Fullerton" , "Garden Grove" , "Glendale" , "Hayward" , "Hollywood" , "Huntington Beach" , "Indio" , "Inglewood" , "Irvine" , "La Habra" , "Laguna Beach" , "Lancaster" , "Livermore" , "Lodi" , "Lompoc" , "Long Beach" , "Los Angeles" , "Malibu" , "Martinez" , "Marysville" , "Menlo Park" , "Merced" , "Modesto" , "Monterey" , "Mountain View" , "Napa" , "Needles" , "Newport Beach" , "Norwalk" , "Novato" , "Oakland" , "Oceanside" , "Ojai" , "Ontario" , "Orange" , "Oroville" , "Oxnard" , "Pacific Grove" , "Palm Springs" , "Palmdale" , "Palo Alto" , "Pasadena" , "Petaluma" , "Pomona" , "Port Hueneme" , "Rancho Cucamonga" , "Red Bluff" , "Redding" , "Redlands" , "Redondo Beach" , "Redwood City" , "Richmond" , "Riverside" , "Roseville" , "Sacramento" , "Salinas" , "San Bernardino" , "San Clemente" , "San Diego" , "San Fernando" , "San Francisco" , "San Gabriel" , "San Jose" , "San Juan Capistrano" , "San Leandro" , "San Luis Obispo" , "San Marino" , "San Mateo" , "San Pedro" , "San Rafael" , "San Simeon" , "Santa Ana" , "Santa Barbara" , "Santa Clara" , "Santa Clarita" , "Santa Cruz" , "Santa Monica" , "Santa Rosa" , "Sausalito" , "Simi Valley" , "Sonoma" , "South San Francisco" , "Stockton" , "Sunnyvale" , "Susanville" , "Thousand Oaks" , "Torrance" , "Turlock" , "Ukiah" , "Vallejo" , "Ventura" , "Victorville" , "Visalia" , "Walnut Creek" , "Watts" , "West Covina" , "Whittier" , "Woodland" , "Yorba Linda" , "Yuba City"])+    , (Colorado, ["Alamosa" , "Aspen" , "Aurora" , "Boulder" , "Breckenridge" , "Brighton" , "Canon City" , "Central City" , "Climax" , "Colorado Springs" , "Cortez" , "Cripple Creek" , "Denver" , "Durango" , "Englewood" , "Estes Park" , "Fort Collins" , "Fort Morgan" , "Georgetown" , "Glenwood Springs" , "Golden" , "Grand Junction" , "Greeley" , "Gunnison" , "La Junta" , "Leadville" , "Littleton" , "Longmont" , "Loveland" , "Montrose" , "Ouray" , "Pagosa Springs" , "Pueblo" , "Silverton" , "Steamboat Springs" , "Sterling" , "Telluride" , "Trinidad" , "Vail" , "Walsenburg" , "Westminster"])+    , (Connecticut, ["Ansonia" , "Berlin" , "Bloomfield" , "Branford" , "Bridgeport" , "Bristol" , "Coventry" , "Danbury" , "Darien" , "Derby" , "East Hartford" , "East Haven" , "Enfield" , "Fairfield" , "Farmington" , "Greenwich" , "Groton" , "Guilford" , "Hamden" , "Hartford" , "Lebanon" , "Litchfield" , "Manchester" , "Mansfield" , "Meriden" , "Middletown" , "Milford" , "Mystic" , "Naugatuck" , "New Britain" , "New Haven" , "New London" , "North Haven" , "Norwalk" , "Norwich" , "Old Saybrook" , "Orange" , "Seymour" , "Shelton" , "Simsbury" , "Southington" , "Stamford" , "Stonington" , "Stratford" , "Torrington" , "Wallingford" , "Waterbury" , "Waterford" , "Watertown" , "West Hartford" , "West Haven" , "Westport" , "Wethersfield" , "Willimantic" , "Windham" , "Windsor" , "Windsor Locks" , "Winsted"])+    , (Delaware, ["Dover" , "Lewes" , "Milford" , "New Castle" , "Newark" , "Smyrna" , "Wilmington"])+    , (Florida, ["Apalachicola" , "Bartow" , "Belle Glade" , "Boca Raton" , "Bradenton" , "Cape Coral" , "Clearwater" , "Cocoa Beach" , "Cocoa-Rockledge" , "Coral Gables" , "Daytona Beach" , "De Land" , "Deerfield Beach" , "Delray Beach" , "Fernandina Beach" , "Fort Lauderdale" , "Fort Myers" , "Fort Pierce" , "Fort Walton Beach" , "Gainesville" , "Hallandale Beach" , "Hialeah" , "Hollywood" , "Homestead" , "Jacksonville" , "Key West" , "Lake City" , "Lake Wales" , "Lakeland" , "Largo" , "Melbourne" , "Miami" , "Miami Beach" , "Naples" , "New Smyrna Beach" , "Ocala" , "Orlando" , "Ormond Beach" , "Palatka" , "Palm Bay" , "Palm Beach" , "Panama City" , "Pensacola" , "Pompano Beach" , "Saint Augustine" , "Saint Petersburg" , "Sanford" , "Sarasota" , "Sebring" , "Tallahassee" , "Tampa" , "Tarpon Springs" , "Titusville" , "Venice" , "West Palm Beach" , "White Springs" , "Winter Haven" , "Winter Park"])+    , (Georgia, ["Albany" , "Americus" , "Andersonville" , "Athens" , "Atlanta" , "Augusta" , "Bainbridge" , "Blairsville" , "Brunswick" , "Calhoun" , "Carrollton" , "Columbus" , "Dahlonega" , "Dalton" , "Darien" , "Decatur" , "Douglas" , "East Point" , "Fitzgerald" , "Fort Valley" , "Gainesville" , "La Grange" , "Macon" , "Marietta" , "Milledgeville" , "Plains" , "Rome" , "Savannah" , "Toccoa" , "Valdosta" , "Warm Springs" , "Warner Robins" , "Washington" , "Waycross"])+    , (Hawaii, ["Hanalei" , "Hilo" , "Honaunau" , "Honolulu" , "Kahului" , "Kaneohe" , "Kapaa" , "Kawaihae" , "Lahaina" , "Laie" , "Wahiawa" , "Wailuku" , "Waimea"])+    , (Idaho, ["Blackfoot" , "Boise" , "Bonners Ferry" , "Caldwell" , "Coeur d’Alene" , "Idaho City" , "Idaho Falls" , "Kellogg" , "Lewiston" , "Moscow" , "Nampa" , "Pocatello" , "Priest River" , "Rexburg" , "Sun Valley" , "Twin Falls"])+    , (Illinois, ["Alton" , "Arlington Heights" , "Arthur" , "Aurora" , "Belleville" , "Belvidere" , "Bloomington" , "Brookfield" , "Cahokia" , "Cairo" , "Calumet City" , "Canton" , "Carbondale" , "Carlinville" , "Carthage" , "Centralia" , "Champaign" , "Charleston" , "Chester" , "Chicago" , "Chicago Heights" , "Cicero" , "Collinsville" , "Danville" , "Decatur" , "DeKalb" , "Des Plaines" , "Dixon" , "East Moline" , "East Saint Louis" , "Effingham" , "Elgin" , "Elmhurst" , "Evanston" , "Freeport" , "Galena" , "Galesburg" , "Glen Ellyn" , "Glenview" , "Granite City" , "Harrisburg" , "Herrin" , "Highland Park" , "Jacksonville" , "Joliet" , "Kankakee" , "Kaskaskia" , "Kewanee" , "La Salle" , "Lake Forest" , "Libertyville" , "Lincoln" , "Lisle" , "Lombard" , "Macomb" , "Mattoon" , "Moline" , "Monmouth" , "Mount Vernon" , "Mundelein" , "Naperville" , "Nauvoo" , "Normal" , "North Chicago" , "Oak Park" , "Oregon" , "Ottawa" , "Palatine" , "Park Forest" , "Park Ridge" , "Pekin" , "Peoria" , "Petersburg" , "Pontiac" , "Quincy" , "Rantoul" , "River Forest" , "Rock Island" , "Rockford" , "Salem" , "Shawneetown" , "Skokie" , "South Holland" , "Springfield" , "Streator" , "Summit" , "Urbana" , "Vandalia" , "Virden" , "Waukegan" , "Wheaton" , "Wilmette" , "Winnetka" , "Wood River" , "Zion"])+    , (Indiana, ["Anderson" , "Bedford" , "Bloomington" , "Columbus" , "Connersville" , "Corydon" , "Crawfordsville" , "East Chicago" , "Elkhart" , "Elwood" , "Evansville" , "Fort Wayne" , "French Lick" , "Gary" , "Geneva" , "Goshen" , "Greenfield" , "Hammond" , "Hobart" , "Huntington" , "Indianapolis" , "Jeffersonville" , "Kokomo" , "Lafayette" , "Madison" , "Marion" , "Michigan City" , "Mishawaka" , "Muncie" , "Nappanee" , "Nashville" , "New Albany" , "New Castle" , "New Harmony" , "Peru" , "Plymouth" , "Richmond" , "Santa Claus" , "Shelbyville" , "South Bend" , "Terre Haute" , "Valparaiso" , "Vincennes" , "Wabash" , "West Lafayette"])+    , (Iowa, ["Amana Colonies" , "Ames" , "Boone" , "Burlington" , "Cedar Falls" , "Cedar Rapids" , "Charles City" , "Cherokee" , "Clinton" , "Council Bluffs" , "Davenport" , "Des Moines" , "Dubuque" , "Estherville" , "Fairfield" , "Fort Dodge" , "Grinnell" , "Indianola" , "Iowa City" , "Keokuk" , "Mason City" , "Mount Pleasant" , "Muscatine" , "Newton" , "Oskaloosa" , "Ottumwa" , "Sioux City" , "Waterloo" , "Webster City" , "West Des Moines"])+    , (Kansas, ["Abilene" , "Arkansas City" , "Atchison" , "Chanute" , "Coffeyville" , "Council Grove" , "Dodge City" , "Emporia" , "Fort Scott" , "Garden City" , "Great Bend" , "Hays" , "Hutchinson" , "Independence" , "Junction City" , "Kansas City" , "Lawrence" , "Leavenworth" , "Liberal" , "Manhattan" , "McPherson" , "Medicine Lodge" , "Newton" , "Olathe" , "Osawatomie" , "Ottawa" , "Overland Park" , "Pittsburg" , "Salina" , "Shawnee" , "Smith Center" , "Topeka" , "Wichita"])+    , (Kentucky, ["Ashland" , "Barbourville" , "Bardstown" , "Berea" , "Boonesborough" , "Bowling Green" , "Campbellsville" , "Covington" , "Danville" , "Elizabethtown" , "Frankfort" , "Harlan" , "Harrodsburg" , "Hazard" , "Henderson" , "Hodgenville" , "Hopkinsville" , "Lexington" , "Louisville" , "Mayfield" , "Maysville" , "Middlesboro" , "Newport" , "Owensboro" , "Paducah" , "Paris" , "Richmond"])+    , (Louisiana, ["Abbeville" , "Alexandria" , "Bastrop" , "Baton Rouge" , "Bogalusa" , "Bossier City" , "Gretna" , "Houma" , "Lafayette" , "Lake Charles" , "Monroe" , "Morgan City" , "Natchitoches" , "New Iberia" , "New Orleans" , "Opelousas" , "Ruston" , "Saint Martinville" , "Shreveport" , "Thibodaux"])+    , (Maine, ["Auburn" , "Augusta" , "Bangor" , "Bar Harbor" , "Bath" , "Belfast" , "Biddeford" , "Boothbay Harbor" , "Brunswick" , "Calais" , "Caribou" , "Castine" , "Eastport" , "Ellsworth" , "Farmington" , "Fort Kent" , "Gardiner" , "Houlton" , "Kennebunkport" , "Kittery" , "Lewiston" , "Lubec" , "Machias" , "Orono" , "Portland" , "Presque Isle" , "Rockland" , "Rumford" , "Saco" , "Scarborough" , "Waterville" , "York"])+    , (Maryland, ["Aberdeen" , "Annapolis" , "Baltimore" , "Bethesda-Chevy Chase" , "Bowie" , "Cambridge" , "Catonsville" , "College Park" , "Columbia" , "Cumberland" , "Easton" , "Elkton" , "Emmitsburg" , "Frederick" , "Greenbelt" , "Hagerstown" , "Hyattsville" , "Laurel" , "Oakland" , "Ocean City" , "Rockville" , "Saint Marys City" , "Salisbury" , "Silver Spring" , "Takoma Park" , "Towson" , "Westminster"])+    , (Massachusetts, ["Abington" , "Adams" , "Amesbury" , "Amherst" , "Andover" , "Arlington" , "Athol" , "Attleboro" , "Barnstable" , "Bedford" , "Beverly" , "Boston" , "Bourne" , "Braintree" , "Brockton" , "Brookline" , "Cambridge" , "Canton" , "Charlestown" , "Chelmsford" , "Chelsea" , "Chicopee" , "Clinton" , "Cohasset" , "Concord" , "Danvers" , "Dartmouth" , "Dedham" , "Dennis" , "Duxbury" , "Eastham" , "Edgartown" , "Everett" , "Fairhaven" , "Fall River" , "Falmouth" , "Fitchburg" , "Framingham" , "Gloucester" , "Great Barrington" , "Greenfield" , "Groton" , "Harwich" , "Haverhill" , "Hingham" , "Holyoke" , "Hyannis" , "Ipswich" , "Lawrence" , "Lenox" , "Leominster" , "Lexington" , "Lowell" , "Ludlow" , "Lynn" , "Malden" , "Marblehead" , "Marlborough" , "Medford" , "Milton" , "Nahant" , "Natick" , "New Bedford" , "Newburyport" , "Newton" , "North Adams" , "Northampton" , "Norton" , "Norwood" , "Peabody" , "Pittsfield" , "Plymouth" , "Provincetown" , "Quincy" , "Randolph" , "Revere" , "Salem" , "Sandwich" , "Saugus" , "Somerville" , "South Hadley" , "Springfield" , "Stockbridge" , "Stoughton" , "Sturbridge" , "Sudbury" , "Taunton" , "Tewksbury" , "Truro" , "Watertown" , "Webster" , "Wellesley" , "Wellfleet" , "West Bridgewater" , "West Springfield" , "Westfield" , "Weymouth" , "Whitman" , "Williamstown" , "Woburn" , "Woods Hole" , "Worcester"])+    , (Michigan, ["Adrian" , "Alma" , "Ann Arbor" , "Battle Creek" , "Bay City" , "Benton Harbor" , "Bloomfield Hills" , "Cadillac" , "Charlevoix" , "Cheboygan" , "Dearborn" , "Detroit" , "East Lansing" , "Eastpointe" , "Ecorse" , "Escanaba" , "Flint" , "Grand Haven" , "Grand Rapids" , "Grayling" , "Grosse Pointe" , "Hancock" , "Highland Park" , "Holland" , "Houghton" , "Interlochen" , "Iron Mountain" , "Ironwood" , "Ishpeming" , "Jackson" , "Kalamazoo" , "Lansing" , "Livonia" , "Ludington" , "Mackinaw City" , "Manistee" , "Marquette" , "Menominee" , "Midland" , "Monroe" , "Mount Clemens" , "Mount Pleasant" , "Muskegon" , "Niles" , "Petoskey" , "Pontiac" , "Port Huron" , "Royal Oak" , "Saginaw" , "Saint Ignace" , "Saint Joseph" , "Sault Sainte Marie" , "Traverse City" , "Trenton" , "Warren" , "Wyandotte" , "Ypsilanti"])+    , (Minnesota, ["Albert Lea" , "Alexandria" , "Austin" , "Bemidji" , "Bloomington" , "Brainerd" , "Crookston" , "Duluth" , "Ely" , "Eveleth" , "Faribault" , "Fergus Falls" , "Hastings" , "Hibbing" , "International Falls" , "Little Falls" , "Mankato" , "Minneapolis" , "Moorhead" , "New Ulm" , "Northfield" , "Owatonna" , "Pipestone" , "Red Wing" , "Rochester" , "Saint Cloud" , "Saint Paul" , "Sauk Centre" , "South Saint Paul" , "Stillwater" , "Virginia" , "Willmar" , "Winona"])+    , (Mississippi, ["Bay Saint Louis" , "Biloxi" , "Canton" , "Clarksdale" , "Columbia" , "Columbus" , "Corinth" , "Greenville" , "Greenwood" , "Grenada" , "Gulfport" , "Hattiesburg" , "Holly Springs" , "Jackson" , "Laurel" , "Meridian" , "Natchez" , "Ocean Springs" , "Oxford" , "Pascagoula" , "Pass Christian" , "Philadelphia" , "Port Gibson" , "Starkville" , "Tupelo" , "Vicksburg" , "West Point" , "Yazoo City"])+    , (Missouri, ["Boonville" , "Branson" , "Cape Girardeau" , "Carthage" , "Chillicothe" , "Clayton" , "Columbia" , "Excelsior Springs" , "Ferguson" , "Florissant" , "Fulton" , "Hannibal" , "Independence" , "Jefferson City" , "Joplin" , "Kansas City" , "Kirksville" , "Lamar" , "Lebanon" , "Lexington" , "Maryville" , "Mexico" , "Monett" , "Neosho" , "New Madrid" , "Rolla" , "Saint Charles" , "Saint Joseph" , "Saint Louis" , "Sainte Genevieve" , "Salem" , "Sedalia" , "Springfield" , "Warrensburg" , "West Plains"])+    , (Montana, ["Anaconda" , "Billings" , "Bozeman" , "Butte" , "Dillon" , "Fort Benton" , "Glendive" , "Great Falls" , "Havre" , "Helena" , "Kalispell" , "Lewistown" , "Livingston" , "Miles City" , "Missoula" , "Virginia City"])+    , (Nebraska, ["Beatrice" , "Bellevue" , "Boys Town" , "Chadron" , "Columbus" , "Fremont" , "Grand Island" , "Hastings" , "Kearney" , "Lincoln" , "McCook" , "Minden" , "Nebraska City" , "Norfolk" , "North Platte" , "Omaha" , "Plattsmouth" , "Red Cloud" , "Sidney"])+    , (Nevada, ["Boulder City" , "Carson City" , "Elko" , "Ely" , "Fallon" , "Genoa" , "Goldfield" , "Henderson" , "Las Vegas" , "North Las Vegas" , "Reno" , "Sparks" , "Virginia City" , "Winnemucca"])+    , (NewHampshire, ["Berlin" , "Claremont" , "Concord" , "Derry" , "Dover" , "Durham" , "Exeter" , "Franklin" , "Hanover" , "Hillsborough" , "Keene" , "Laconia" , "Lebanon" , "Manchester" , "Nashua" , "Peterborough" , "Plymouth" , "Portsmouth" , "Rochester" , "Salem" , "Somersworth"])+    , (NewJersey, ["Asbury Park" , "Atlantic City" , "Bayonne" , "Bloomfield" , "Bordentown" , "Bound Brook" , "Bridgeton" , "Burlington" , "Caldwell" , "Camden" , "Cape May" , "Clifton" , "Cranford" , "East Orange" , "Edison" , "Elizabeth" , "Englewood" , "Fort Lee" , "Glassboro" , "Hackensack" , "Haddonfield" , "Hoboken" , "Irvington" , "Jersey City" , "Lakehurst" , "Lakewood" , "Long Beach" , "Long Branch" , "Madison" , "Menlo Park" , "Millburn" , "Millville" , "Montclair" , "Morristown" , "Mount Holly" , "New Brunswick" , "New Milford" , "Newark" , "Ocean City" , "Orange" , "Parsippany–Troy Hills" , "Passaic" , "Paterson" , "Perth Amboy" , "Plainfield" , "Princeton" , "Ridgewood" , "Roselle" , "Rutherford" , "Salem" , "Somerville" , "South Orange Village" , "Totowa" , "Trenton" , "Union" , "Union City" , "Vineland" , "Wayne" , "Weehawken" , "West New York" , "West Orange" , "Willingboro" , "Woodbridge"])+    , (NewMexico, ["Acoma" , "Alamogordo" , "Albuquerque" , "Artesia" , "Belen" , "Carlsbad" , "Clovis" , "Deming" , "Farmington" , "Gallup" , "Grants" , "Hobbs" , "Las Cruces" , "Las Vegas" , "Los Alamos" , "Lovington" , "Portales" , "Raton" , "Roswell" , "Santa Fe" , "Shiprock" , "Silver City" , "Socorro" , "Taos" , "Truth or Consequences" , "Tucumcari"])+    , (NewYork, ["Albany" , "Amsterdam" , "Auburn" , "Babylon" , "Batavia" , "Beacon" , "Bedford" , "Binghamton" , "Bronx" , "Brooklyn" , "Buffalo" , "Chautauqua" , "Cheektowaga" , "Clinton" , "Cohoes" , "Coney Island" , "Cooperstown" , "Corning" , "Cortland" , "Crown Point" , "Dunkirk" , "East Aurora" , "East Hampton" , "Eastchester" , "Elmira" , "Flushing" , "Forest Hills" , "Fredonia" , "Garden City" , "Geneva" , "Glens Falls" , "Gloversville" , "Great Neck" , "Hammondsport" , "Harlem" , "Hempstead" , "Herkimer" , "Hudson" , "Huntington" , "Hyde Park" , "Ilion" , "Ithaca" , "Jamestown" , "Johnstown" , "Kingston" , "Lackawanna" , "Lake Placid" , "Levittown" , "Lockport" , "Mamaroneck" , "Manhattan" , "Massena" , "Middletown" , "Mineola" , "Mount Vernon" , "New Paltz" , "New Rochelle" , "New Windsor" , "New York City" , "Newburgh" , "Niagara Falls" , "North Hempstead" , "Nyack" , "Ogdensburg" , "Olean" , "Oneida" , "Oneonta" , "Ossining" , "Oswego" , "Oyster Bay" , "Palmyra" , "Peekskill" , "Plattsburgh" , "Port Washington" , "Potsdam" , "Poughkeepsie" , "Queens" , "Rensselaer" , "Rochester" , "Rome" , "Rotterdam" , "Rye" , "Sag Harbor" , "Saranac Lake" , "Saratoga Springs" , "Scarsdale" , "Schenectady" , "Seneca Falls" , "Southampton" , "Staten Island" , "Stony Brook" , "Stony Point" , "Syracuse" , "Tarrytown" , "Ticonderoga" , "Tonawanda" , "Troy" , "Utica" , "Watertown" , "Watervliet" , "Watkins Glen" , "West Seneca" , "White Plains" , "Woodstock" , "Yonkers"])+    , (NorthCarolina, ["Asheboro" , "Asheville" , "Bath" , "Beaufort" , "Boone" , "Burlington" , "Chapel Hill" , "Charlotte" , "Concord" , "Durham" , "Edenton" , "Elizabeth City" , "Fayetteville" , "Gastonia" , "Goldsboro" , "Greensboro" , "Greenville" , "Halifax" , "Henderson" , "Hickory" , "High Point" , "Hillsborough" , "Jacksonville" , "Kinston" , "Kitty Hawk" , "Lumberton" , "Morehead City" , "Morganton" , "Nags Head" , "New Bern" , "Pinehurst" , "Raleigh" , "Rocky Mount" , "Salisbury" , "Shelby" , "Washington" , "Wilmington" , "Wilson" , "Winston-Salem"])+    , (NorthDakota, ["Bismarck" , "Devils Lake" , "Dickinson" , "Fargo" , "Grand Forks" , "Jamestown" , "Mandan" , "Minot" , "Rugby" , "Valley City" , "Wahpeton" , "Williston"])+    , (Ohio, ["Akron" , "Alliance" , "Ashtabula" , "Athens" , "Barberton" , "Bedford" , "Bellefontaine" , "Bowling Green" , "Canton" , "Chillicothe" , "Cincinnati" , "Cleveland" , "Cleveland Heights" , "Columbus" , "Conneaut" , "Cuyahoga Falls" , "Dayton" , "Defiance" , "Delaware" , "East Cleveland" , "East Liverpool" , "Elyria" , "Euclid" , "Findlay" , "Gallipolis" , "Greenville" , "Hamilton" , "Kent" , "Kettering" , "Lakewood" , "Lancaster" , "Lima" , "Lorain" , "Mansfield" , "Marietta" , "Marion" , "Martins Ferry" , "Massillon" , "Mentor" , "Middletown" , "Milan" , "Mount Vernon" , "New Philadelphia" , "Newark" , "Niles" , "North College Hill" , "Norwalk" , "Oberlin" , "Painesville" , "Parma" , "Piqua" , "Portsmouth" , "Put-in-Bay" , "Salem" , "Sandusky" , "Shaker Heights" , "Springfield" , "Steubenville" , "Tiffin" , "Toledo" , "Urbana" , "Warren" , "Wooster" , "Worthington" , "Xenia" , "Yellow Springs" , "Youngstown" , "Zanesville"])+    , (Oklahoma, ["Ada" , "Altus" , "Alva" , "Anadarko" , "Ardmore" , "Bartlesville" , "Bethany" , "Chickasha" , "Claremore" , "Clinton" , "Cushing" , "Duncan" , "Durant" , "Edmond" , "El Reno" , "Elk City" , "Enid" , "Eufaula" , "Frederick" , "Guthrie" , "Guymon" , "Hobart" , "Holdenville" , "Hugo" , "Lawton" , "McAlester" , "Miami" , "Midwest City" , "Moore" , "Muskogee" , "Norman" , "Oklahoma City" , "Okmulgee" , "Pauls Valley" , "Pawhuska" , "Perry" , "Ponca City" , "Pryor" , "Sallisaw" , "Sand Springs" , "Sapulpa" , "Seminole" , "Shawnee" , "Stillwater" , "Tahlequah" , "The Village" , "Tulsa" , "Vinita" , "Wewoka" , "Woodward"])+    , (Oregon, ["Albany" , "Ashland" , "Astoria" , "Baker City" , "Beaverton" , "Bend" , "Brookings" , "Burns" , "Coos Bay" , "Corvallis" , "Eugene" , "Grants Pass" , "Hillsboro" , "Hood River" , "Jacksonville" , "John Day" , "Klamath Falls" , "La Grande" , "Lake Oswego" , "Lakeview" , "McMinnville" , "Medford" , "Newberg" , "Newport" , "Ontario" , "Oregon City" , "Pendleton" , "Port Orford" , "Portland" , "Prineville" , "Redmond" , "Reedsport" , "Roseburg" , "Salem" , "Seaside" , "Springfield" , "The Dalles" , "Tillamook"])+    , (Pennsylvania, ["Abington" , "Aliquippa" , "Allentown" , "Altoona" , "Ambridge" , "Bedford" , "Bethlehem" , "Bloomsburg" , "Bradford" , "Bristol" , "Carbondale" , "Carlisle" , "Chambersburg" , "Chester" , "Columbia" , "Easton" , "Erie" , "Franklin" , "Germantown" , "Gettysburg" , "Greensburg" , "Hanover" , "Harmony" , "Harrisburg" , "Hazleton" , "Hershey" , "Homestead" , "Honesdale" , "Indiana" , "Jeannette" , "Jim Thorpe" , "Johnstown" , "Lancaster" , "Lebanon" , "Levittown" , "Lewistown" , "Lock Haven" , "Lower Southampton" , "McKeesport" , "Meadville" , "Middletown" , "Monroeville" , "Nanticoke" , "New Castle" , "New Hope" , "New Kensington" , "Norristown" , "Oil City" , "Philadelphia" , "Phoenixville" , "Pittsburgh" , "Pottstown" , "Pottsville" , "Reading" , "Scranton" , "Shamokin" , "Sharon" , "State College" , "Stroudsburg" , "Sunbury" , "Swarthmore" , "Tamaqua" , "Titusville" , "Uniontown" , "Warren" , "Washington" , "West Chester" , "Wilkes-Barre" , "Williamsport" , "York"])+    , (RhodeIsland, ["Barrington" , "Bristol" , "Central Falls" , "Cranston" , "East Greenwich" , "East Providence" , "Kingston" , "Middletown" , "Narragansett" , "Newport" , "North Kingstown" , "Pawtucket" , "Portsmouth" , "Providence" , "South Kingstown" , "Tiverton" , "Warren" , "Warwick" , "Westerly" , "Wickford" , "Woonsocket"])+    , (SouthCarolina, ["Abbeville" , "Aiken" , "Anderson" , "Beaufort" , "Camden" , "Charleston" , "Columbia" , "Darlington" , "Florence" , "Gaffney" , "Georgetown" , "Greenville" , "Greenwood" , "Hartsville" , "Lancaster" , "Mount Pleasant" , "Myrtle Beach" , "Orangeburg" , "Rock Hill" , "Spartanburg" , "Sumter" , "Union"])+    , (SouthDakota, ["Aberdeen" , "Belle Fourche" , "Brookings" , "Canton" , "Custer" , "De Smet" , "Deadwood" , "Hot Springs" , "Huron" , "Lead" , "Madison" , "Milbank" , "Mitchell" , "Mobridge" , "Pierre" , "Rapid City" , "Sioux Falls" , "Spearfish" , "Sturgis" , "Vermillion" , "Watertown" , "Yankton"])+    , (Tennessee, ["Alcoa" , "Athens" , "Chattanooga" , "Clarksville" , "Cleveland" , "Columbia" , "Cookeville" , "Dayton" , "Elizabethton" , "Franklin" , "Gallatin" , "Gatlinburg" , "Greeneville" , "Jackson" , "Johnson City" , "Jonesborough" , "Kingsport" , "Knoxville" , "Lebanon" , "Maryville" , "Memphis" , "Morristown" , "Murfreesboro" , "Nashville" , "Norris" , "Oak Ridge" , "Shelbyville" , "Tullahoma"])+    , (Texas, ["Abilene" , "Alpine" , "Amarillo" , "Arlington" , "Austin" , "Baytown" , "Beaumont" , "Big Spring" , "Borger" , "Brownsville" , "Bryan" , "Canyon" , "Cleburne" , "College Station" , "Corpus Christi" , "Crystal City" , "Dallas" , "Del Rio" , "Denison" , "Denton" , "Eagle Pass" , "Edinburg" , "El Paso" , "Fort Worth" , "Freeport" , "Galveston" , "Garland" , "Goliad" , "Greenville" , "Harlingen" , "Houston" , "Huntsville" , "Irving" , "Johnson City" , "Kilgore" , "Killeen" , "Kingsville" , "Laredo" , "Longview" , "Lubbock" , "Lufkin" , "Marshall" , "McAllen" , "McKinney" , "Mesquite" , "Midland" , "Mission" , "Nacogdoches" , "New Braunfels" , "Odessa" , "Orange" , "Pampa" , "Paris" , "Pasadena" , "Pecos" , "Pharr" , "Plainview" , "Plano" , "Port Arthur" , "Port Lavaca" , "Richardson" , "San Angelo" , "San Antonio" , "San Felipe" , "San Marcos" , "Sherman" , "Sweetwater" , "Temple" , "Texarkana" , "Texas City" , "Tyler" , "Uvalde" , "Victoria" , "Waco" , "Weatherford" , "Wichita Falls" , "Ysleta"])+    , (Utah, ["Alta" , "American Fork" , "Bountiful" , "Brigham City" , "Cedar City" , "Clearfield" , "Delta" , "Fillmore" , "Green River" , "Heber City" , "Kanab" , "Layton" , "Lehi" , "Logan" , "Manti" , "Moab" , "Monticello" , "Murray" , "Nephi" , "Ogden" , "Orderville" , "Orem" , "Panguitch" , "Park City" , "Payson" , "Price" , "Provo" , "Saint George" , "Salt Lake City" , "Spanish Fork" , "Springville" , "Tooele" , "Vernal"])+    , (Vermont, ["Barre" , "Bellows Falls" , "Bennington" , "Brattleboro" , "Burlington" , "Essex" , "Manchester" , "Middlebury" , "Montpelier" , "Newport" , "Plymouth" , "Rutland" , "Saint Albans" , "Saint Johnsbury" , "Sharon" , "Winooski"])+    , (Virginia, ["Abingdon" , "Alexandria" , "Bristol" , "Charlottesville" , "Chesapeake" , "Danville" , "Fairfax" , "Falls Church" , "Fredericksburg" , "Hampton" , "Hanover" , "Hopewell" , "Lexington" , "Lynchburg" , "Manassas" , "Martinsville" , "New Market" , "Newport News" , "Norfolk" , "Petersburg" , "Portsmouth" , "Reston" , "Richmond" , "Roanoke" , "Staunton" , "Suffolk" , "Virginia Beach" , "Waynesboro" , "Williamsburg" , "Winchester"])+    , (Washington, ["Aberdeen" , "Anacortes" , "Auburn" , "Bellevue" , "Bellingham" , "Bremerton" , "Centralia" , "Coulee Dam" , "Coupeville" , "Ellensburg" , "Ephrata" , "Everett" , "Hoquiam" , "Kelso" , "Kennewick" , "Longview" , "Moses Lake" , "Oak Harbor" , "Olympia" , "Pasco" , "Point Roberts" , "Port Angeles" , "Pullman" , "Puyallup" , "Redmond" , "Renton" , "Richland" , "Seattle" , "Spokane" , "Tacoma" , "Vancouver" , "Walla Walla" , "Wenatchee" , "Yakima"])+    , (WestVirginia, ["Bath" , "Beckley" , "Bluefield" , "Buckhannon" , "Charles Town" , "Charleston" , "Clarksburg" , "Elkins" , "Fairmont" , "Grafton" , "Harpers Ferry" , "Hillsboro" , "Hinton" , "Huntington" , "Keyser" , "Lewisburg" , "Logan" , "Martinsburg" , "Morgantown" , "Moundsville" , "New Martinsville" , "Parkersburg" , "Philippi" , "Point Pleasant" , "Princeton" , "Romney" , "Shepherdstown" , "South Charleston" , "Summersville" , "Weirton" , "Welch" , "Wellsburg" , "Weston" , "Wheeling" , "White Sulphur Springs" , "Williamson"])+    , (Wisconsin, ["Appleton" , "Ashland" , "Baraboo" , "Belmont" , "Beloit" , "Eau Claire" , "Fond du Lac" , "Green Bay" , "Hayward" , "Janesville" , "Kenosha" , "La Crosse" , "Lake Geneva" , "Madison" , "Manitowoc" , "Marinette" , "Menasha" , "Milwaukee" , "Neenah" , "New Glarus" , "Oconto" , "Oshkosh" , "Peshtigo" , "Portage" , "Prairie du Chien" , "Racine" , "Rhinelander" , "Ripon" , "Sheboygan" , "Spring Green" , "Stevens Point" , "Sturgeon Bay" , "Superior" , "Waukesha" , "Wausau" , "Wauwatosa" , "West Allis" , "West Bend" , "Wisconsin Dells"])+    , (Wyoming, ["Buffalo" , "Casper" , "Cheyenne" , "Cody" , "Douglas" , "Evanston" , "Gillette" , "Green River" , "Jackson" , "Lander" , "Laramie" , "Newcastle" , "Powell" , "Rawlins" , "Riverton" , "Rock Springs" , "Sheridan" , "Ten Sleep" , "Thermopolis" , "Torrington" , "Worland"])+    ]
+ src/Fake/Provider/DateTime.hs view
@@ -0,0 +1,35 @@+module Fake.Provider.DateTime where++------------------------------------------------------------------------------+import Data.Time+------------------------------------------------------------------------------+import Fake.Combinators+import Fake.Types+------------------------------------------------------------------------------++------------------------------------------------------------------------------+-- | Generates a random UTCTime in the range [from, to].+utcBetween :: UTCTime -> UTCTime -> FGen UTCTime+utcBetween from to = do+    delta <- fromRange (0 :: Double, realToFrac $ diffUTCTime to from)+    return $ addUTCTime (realToFrac delta) from++------------------------------------------------------------------------------+-- | Generates a random Day in the range [from, to].+dayBetween :: Day -> Day -> FGen Day+dayBetween from to = do+    delta <- fromRange (0, diffDays to from)+    return $ addDays delta from++dayBetweenYears :: Integer -> Integer -> FGen Day+dayBetweenYears ystart yend =+    fakeEnumFromTo (fromGregorian ystart 1 1) (fromGregorian yend 12 31)++timeBetweenHours :: Int -> Int -> FGen DiffTime+timeBetweenHours hstart hend = secondsToDiffTime <$> fromRange (fromIntegral from, fromIntegral to)+  where+    from = hstart * 3600+    to = hend * 3599++utcBetweenYears :: Integer -> Integer -> FGen UTCTime+utcBetweenYears ystart yend = UTCTime <$> dayBetweenYears ystart yend <*> timeBetweenHours 0 24
+ src/Fake/Provider/IdNumber/EN_US.hs view
@@ -0,0 +1,32 @@+module Fake.Provider.IdNumber.EN_US+  ( ssn+  ) where++------------------------------------------------------------------------------+import Text.Printf+------------------------------------------------------------------------------+import Fake+------------------------------------------------------------------------------++------------------------------------------------------------------------------+-- | Generates a fake US social security number.  The have the form+-- area-group-serial.+ssn :: FGen String+ssn = do+    area <- ssnArea+    group <- ssnGroup+    serial <- ssnSerial+    return $ printf "%03d-%02d-%04d" area group serial++fixupArea :: Int -> Int+fixupArea 666 = 667+fixupArea n = n++ssnArea :: FGen Int+ssnArea = fixupArea <$> fakeInt 0 899++ssnGroup :: FGen Int+ssnGroup = fakeInt 1 99++ssnSerial :: FGen Int+ssnSerial = fakeInt 1 9999
+ src/Fake/Provider/Lang.hs view
@@ -0,0 +1,52 @@+{-# LANGUAGE CPP                        #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}++module Fake.Provider.Lang+  ( SingleWord(..)+  , capitalize+  , lowerize+  , Phrase+  , phrase+  , phraseText+  ) where++import           Data.Bifunctor+#if MIN_VERSION_base(4,11,0)+import           Data.Semigroup+#endif+import           Data.String+import           Data.Text (Text)+import qualified Data.Text as T+import           Fake.Types++------------------------------------------------------------------------------+-- | Newtype wrapper representing a single word.+newtype SingleWord = SingleWord { unSingleWord :: Text }+#if MIN_VERSION_base(4,11,0)+  deriving (Eq,Ord,Show,Semigroup,Monoid,IsString)+#else+  deriving (Eq,Ord,Show,Monoid,IsString)+#endif++capitalize :: SingleWord -> SingleWord+capitalize = SingleWord .+             uncurry mappend . first T.toUpper . T.splitAt 1 . unSingleWord++lowerize :: SingleWord -> SingleWord+lowerize = SingleWord .+           uncurry mappend . first T.toLower . T.splitAt 1 . unSingleWord++------------------------------------------------------------------------------+newtype Phrase = Phrase { unPhrase :: [SingleWord] }+#if MIN_VERSION_base(4,11,0)+  deriving (Eq,Ord,Show,Semigroup,Monoid)+#else+  deriving (Eq,Ord,Show,Monoid)+#endif++phraseText :: Phrase -> Text+phraseText = T.unwords . map unSingleWord . unPhrase++phrase :: [FGen SingleWord] -> FGen Phrase+phrase = fmap Phrase . sequence+
+ src/Fake/Provider/Lang/EN_US.hs view
@@ -0,0 +1,209 @@+{-# LANGUAGE OverloadedStrings #-}++module Fake.Provider.Lang.EN_US where++import Fake.Combinators+import Fake.Provider.Lang+import Fake.Types++adjective :: FGen SingleWord+adjective = elements+  ["able", "acid", "angry", "automatic", "awake", "bad", "beautiful",+  "bent", "bitter", "black", "blue", "boiling", "bright", "broken",+  "brown", "certain", "cheap", "chemical", "chief", "clean", "clear",+  "cold", "common", "complete", "complex", "conscious", "cruel", "cut",+  "dark", "dead", "dear", "deep", "delicate", "dependent", "different",+  "dirty", "dry", "early", "elastic", "electric", "equal", "false", "fat",+  "feeble", "female", "fertile", "first", "fixed", "flat", "foolish",+  "free", "frequent", "full", "future", "general", "good", "gray",+  "great", "green", "hanging", "happy", "hard", "healthy", "high",+  "hollow", "ill", "important", "kind", "last", "late", "left", "like",+  "living", "long", "loose", "loud", "low", "male", "married", "material",+  "medical", "military", "mixed", "narrow", "natural", "necessary",+  "new", "normal", "old", "open", "opposite", "parallel", "past",+  "physical", "political", "poor", "possible", "present", "private",+  "probable", "public", "quick", "quiet", "ready", "red", "regular",+  "responsible", "right", "rough", "round", "sad", "safe", "same",+  "second", "secret", "separate", "serious", "sharp", "short", "shut",+  "simple", "slow", "small", "smooth", "soft", "solid", "special",+  "sticky", "stiff", "straight", "strange", "strong", "sudden", "sweet",+  "tall", "thick", "thin", "tight", "tired", "true", "violent", "waiting",+  "warm", "wet", "white", "wide", "wise", "wrong", "yellow", "young"]+++noun :: FGen SingleWord+noun = elements+  ["account", "act", "addition", "adjustment", "advertisement", "agreement", "air",+  "amount", "amusement", "angle", "animal", "answer", "ant", "apparatus", "apple",+  "approval", "arch", "argument", "arm", "army", "art", "attack", "attempt",+  "attention", "attraction", "authority", "baby", "back", "bag", "balance",+  "ball", "band", "base", "basin", "basket", "bath", "bed", "bee", "behavior",+  "belief", "bell", "berry", "bird", "birth", "bit", "bite", "blade", "blood",+  "blow", "board", "boat", "body", "bone", "book", "boot", "bottle", "box", "boy",+  "brain", "brake", "branch", "brass", "bread", "breath", "brick", "bridge",+  "brother", "brush", "bucket", "building", "bulb", "burn", "burst", "business",+  "butter", "button", "cake", "camera", "canvas", "card", "care", "carriage",+  "cart", "cat", "cause", "chain", "chalk", "chance", "change", "cheese", "chest",+  "chin", "church", "circle", "clock", "cloth", "cloud", "coal", "coat", "collar",+  "color", "comb", "comfort", "committee", "company", "comparison", "competition",+  "condition", "connection", "control", "cook", "copper", "copy", "cord", "cork",+  "cotton", "cough", "country", "cover", "cow", "crack", "credit", "crime",+  "crush", "cry", "cup", "current", "curtain", "curve", "cushion", "damage",+  "danger", "daughter", "day", "death", "debt", "decision", "degree", "design",+  "desire", "destruction", "detail", "development", "digestion", "direction",+  "discovery", "discussion", "disease", "disgust", "distance", "distribution",+  "division", "dog", "door", "doubt", "drain", "drawer", "dress", "drink",+  "driving", "drop", "dust", "ear", "earth", "edge", "education", "effect", "egg",+  "end", "engine", "error", "event", "example", "exchange", "existence",+  "expansion", "experience", "expert", "eye", "face", "fact", "fall", "family",+  "farm", "father", "fear", "feather", "feeling", "fiction", "field", "fight",+  "finger", "fire", "fish", "flag", "flame", "flight", "floor", "flower", "fly",+  "fold", "food", "foot", "force", "fork", "form", "fowl", "frame", "friend",+  "front", "fruit", "garden", "girl", "glass", "glove", "goat", "gold",+  "government", "grain", "grass", "grip", "group", "growth", "guide", "gun",+  "hair", "hammer", "hand", "harbor", "harmony", "hat", "hate", "head", "hearing",+  "heart", "heat", "help", "history", "hole", "hook", "hope", "horn", "horse",+  "hospital", "hour", "house", "humor", "ice", "idea", "impulse", "increase",+  "industry", "ink", "insect", "instrument", "insurance", "interest", "invention",+  "iron", "island", "jelly", "jewel", "join", "journey", "judge", "jump",+  "kettle", "key", "kick", "kiss", "knee", "knife", "knot", "knowledge", "land",+  "language", "laugh", "law", "lead", "leaf", "learning", "leather", "leg",+  "letter", "level", "library", "lift", "light", "limit", "line", "linen", "lip",+  "liquid", "list", "lock", "look", "loss", "love", "machine", "man", "manager",+  "map", "mark", "market", "mass", "match", "meal", "measure", "meat", "meeting",+  "memory", "metal", "middle", "milk", "mind", "mine", "minute", "mist", "money",+  "monkey", "month", "moon", "morning", "mother", "motion", "mountain", "mouth",+  "move", "muscle", "music", "nail", "name", "nation", "neck", "need", "needle",+  "nerve", "net", "news", "night", "noise", "nose", "note", "number", "nut",+  "observation", "offer", "office", "oil", "operation", "opinion", "orange",+  "order", "organisation", "ornament", "oven", "owner", "page", "pain", "paint",+  "paper", "parcel", "part", "paste", "payment", "peace", "pen", "pencil",+  "person", "picture", "pig", "pin", "pipe", "place", "plane", "plant", "plate",+  "play", "pleasure", "plow", "pocket", "point", "poison", "polish", "porter",+  "position", "pot", "potato", "powder", "power", "price", "print", "prison",+  "process", "produce", "profit", "property", "prose", "protest", "pull", "pump",+  "punishment", "purpose", "push", "quality", "question", "rail", "rain", "range",+  "rat", "rate", "ray", "reaction", "reading", "reason", "receipt", "record",+  "regret", "relation", "religion", "representative", "request", "respect",+  "rest", "reward", "rhythm", "rice", "ring", "river", "road", "rod", "roll",+  "roof", "room", "root", "rub", "rule", "run", "sail", "salt", "sand", "scale",+  "school", "science", "scissors", "screw", "sea", "seat", "secretary", "seed",+  "selection", "self", "sense", "servant", "sex", "shade", "shake", "shame",+  "sheep", "shelf", "ship", "shirt", "shock", "shoe", "side", "sign", "silk",+  "silver", "sister", "size", "skin", "skirt", "sky", "sleep", "slip", "slope",+  "smash", "smell", "smile", "smoke", "snake", "sneeze", "snow", "soap",+  "society", "sock", "son", "song", "sort", "sound", "soup", "space", "spade",+  "sponge", "spoon", "spring", "square", "stage", "stamp", "star", "start",+  "statement", "station", "steam", "steel", "stem", "step", "stick", "stitch",+  "stocking", "stomach", "stone", "stop", "store", "story", "street", "stretch",+  "structure", "substance", "sugar", "suggestion", "summer", "sun", "support",+  "surprise", "swim", "system", "table", "tail", "talk", "taste", "tax",+  "teaching", "tendency", "test", "theory", "thing", "thought", "thread",+  "throat", "thumb", "thunder", "ticket", "time", "tin", "toe", "tongue", "tooth",+  "top", "touch", "town", "trade", "train", "transport", "tray", "tree", "trick",+  "trouble", "trousers", "turn", "twist", "umbrella", "unit", "use", "value",+  "verse", "vessel", "view", "voice", "walk", "wall", "war", "wash", "waste",+  "watch", "water", "wave", "wax", "way", "weather", "week", "weight", "wheel",+  "whip", "whistle", "wind", "window", "wine", "wing", "winter", "wire", "woman",+  "wood", "wool", "word", "work", "worm", "wound", "writing", "year"]++verb :: FGen SingleWord+verb = elements+  ["is", "are", "has", "get", "see", "need", "know", "would", "find", "take",+  "want", "does", "learn", "become", "come", "include", "thank", "provide",+  "create", "add", "understand", "consider", "choose", "develop", "remember",+  "determine", "grow", "allow", "supply", "bring", "improve", "maintain", "begin",+  "exist", "tend", "enjoy", "perform", "decide", "identify", "continue",+  "protect", "require", "occur", "write", "approach", "avoid", "prepare", "build",+  "achieve", "believe", "receive", "seem", "discuss", "realize", "contain",+  "follow", "refer", "solve", "describe", "prefer", "prevent", "discover",+  "ensure", "expect", "invest", "reduce", "speak", "appear", "explain", "explore",+  "involve", "lose", "afford", "agree", "hear", "remain", "represent", "apply",+  "forget", "recommend", "rely", "vary", "generate", "obtain", "accept",+  "communicate", "complain", "depend", "enter", "happen", "indicate", "suggest",+  "survive", "appreciate", "compare", "imagine", "manage", "differ", "encourage",+  "expand", "prove", "react", "recognize", "relax", "replace", "borrow", "earn",+  "emphasize", "enable", "operate", "reflect", "send", "anticipate", "assume",+  "engage", "enhance", "examine", "install", "participate", "intend", "introduce",+  "relate", "settle", "assure", "attract", "distribute", "overcome", "owe",+  "succeed", "suffer", "throw", "acquire", "adapt", "adjust", "argue", "arise",+  "confirm", "encouraging", "incorporate", "justify", "organize", "ought",+  "possess", "relieve", "retain", "shut", "calculate", "compete", "consult",+  "deliver", "extend", "investigate", "negotiate", "qualify", "retire", "rid",+  "weigh", "arrive", "attach", "behave", "celebrate", "convince", "disagree",+  "establish", "ignore", "imply", "insist", "pursue", "remaining", "specify",+  "warn", "accuse", "admire", "admit", "adopt", "announce", "apologize",+  "approve", "attend", "belong", "commit", "criticize", "deserve", "destroy",+  "hesitate", "illustrate", "inform", "manufacturing", "persuade", "pour",+  "propose", "remind", "shall", "submit", "suppose", "translate"]++adverb :: FGen SingleWord+adverb = elements+  ["abnormally", "absentmindedly", "accidentally", "actually", "adventurously",+  "afterwards", "almost", "always", "annually", "anxiously", "arrogantly",+  "awkwardly", "bashfully", "beautifully", "bitterly", "bleakly", "blindly",+  "blissfully", "boastfully", "boldly", "bravely", "briefly", "brightly",+  "briskly", "broadly", "busily", "calmly", "carefully", "carelessly",+  "cautiously", "certainly", "cheerfully", "clearly", "cleverly", "closely",+  "coaxingly", "colorfully", "commonly", "continually", "coolly", "correctly",+  "courageously", "crossly", "cruelly", "curiously", "daily", "daintily",+  "dearly", "deceivingly", "deeply", "defiantly", "deliberately",+  "delightfully", "diligently", "dimly", "doubtfully", "dreamily", "easily",+  "elegantly", "energetically", "enormously", "enthusiastically", "equally",+  "especially", "even", "evenly", "eventually", "exactly", "excitedly",+  "extremely", "fairly", "faithfully", "famously", "far", "fast", "fatally",+  "ferociously", "fervently", "fiercely", "fondly", "foolishly", "fortunately",+  "frankly", "frantically", "freely", "frenetically", "frightfully", "fully",+  "furiously", "generally", "generously", "gently", "gladly", "gleefully",+  "gracefully", "gratefully", "greatly", "greedily", "happily", "hastily",+  "healthily", "heavily", "helpfully", "helplessly", "highly", "honestly",+  "hopelessly", "hourly", "hungrily", "immediately", "innocently",+  "inquisitively", "instantly", "intensely", "intently", "interestingly",+  "inwardly", "irritably", "jaggedly", "jealously", "jovially", "joyfully",+  "joyously", "jubilantly", "judgmentally", "justly", "keenly", "kiddingly",+  "kindheartedly", "kindly", "knavishly", "knowingly", "knowledgeably",+  "kookily", "lazily", "les", "lightly", "likely", "limply", "lively",+  "loftily", "longingly", "loosely", "loudly", "lovingly", "loyally", "madly",+  "majestically", "meaningfully", "mechanically", "merrily", "miserably",+  "mockingly", "monthly", "more", "mortally", "mostly", "mysteriously",+  "naturally", "hopelessly", "hourly", "hungrily", "immediately", "innocently",+  "inquisitively", "instantly", "intensely", "intently", "interestingly",+  "inwardly", "irritably", "jaggedly", "jealously", "jovially", "joyfully",+  "joyously", "jubilantly", "judgmentally", "justly", "keenly", "kiddingly",+  "kindheartedly", "kindly", "knavishly", "knowingly", "knowledgeably",+  "kookily", "lazily", "less", "lightly", "likely", "limply", "lively",+  "loftily", "longingly", "loosely", "loudly", "lovingly", "loyally", "madly",+  "majestically", "meaningfully", "mechanically", "merrily", "miserably",+  "mockingly", "monthly", "more", "mortally", "mostly", "mysteriously",+  "naturally", "nearly", "neatly", "nervously", "never", "nicely", "noisily",+  "not", "obediently", "obnoxiously", "oddly", "offensively", "officially",+  "often", "only", "openly", "optimistically", "overconfidently", "painfully",+  "partially", "patiently", "perfectly", "physically", "playfully", "politely",+  "poorly", "positively", "potentially", "powerfully", "promptly", "properly",+  "punctually", "quaintly", "queasily", "queerly", "questionably", "quicker",+  "quickly", "quietly", "quirkily", "quizzically", "randomly", "rapidly",+  "rarely", "readily", "really", "reassuringly", "recklessly", "regularly",+  "reluctantly", "repeatedly", "reproachfully", "restfully", "righteously",+  "rightfully", "rigidly", "roughly", "rudely", "safely", "scarcely", "scarily",+  "searchingly", "sedately", "seemingly", "seldom", "selfishly", "separately",+  "seriously", "shakily", "sharply", "sheepishly", "shrilly", "shyly",+  "silently", "sleepily", "slowly", "smoothly", "softly", "solemnly", "solidly",+  "sometimes", "soon", "speedily", "stealthily", "sternly", "strictly",+  "successfully", "suddenly", "supposedly", "surprisingly", "suspiciously",+  "sweetly", "swiftly", "sympathetically", "tenderly", "tensely", "terribly",+  "thankfully", "thoroughly", "thoughtfully", "tightly", "tremendously",+  "triumphantly", "truly", "truthfully", "rightfully", "scarcely",+  "searchingly", "sedately", "seemingly", "selfishly", "separately",+  "seriously", "sheepishly", "smoothly", "solemnly", "sometimes", "speedily",+  "stealthily", "successfully", "suddenly", "supposedly", "surprisingly",+  "suspiciously", "sympathetically", "tenderly", "thankfully", "thoroughly",+  "thoughtfully", "tremendously", "triumphantly", "truthfully", "ultimately",+  "unabashedly", "unaccountably", "unbearably", "unethically", "unexpectedly",+  "unfortunately", "unimpressively", "unnaturally", "unnecessarily", "upbeat",+  "upright", "upside-down", "upward", "urgently", "usefully", "uselessly",+  "usually", "utterly", "vacantly", "vaguely", "vainly", "valiantly", "vastly",+  "verbally", "very", "viciously", "victoriously", "violently", "vivaciously",+  "voluntarily", "warmly", "weakly", "wearily", "well", "wetly", "wholly",+  "wildly", "willfully", "wisely", "woefully", "wonderfully", "worriedly",+  "wrongly", "yawningly", "yearly", "yearningly", "yesterday", "yieldingly",+  "youthfully", "zealously", "zestfully", "zestily"]
+ src/Fake/Provider/Locale.hs view
@@ -0,0 +1,212 @@+module Fake.Provider.Locale+  ( fakeLocale+  , localeMap+  ) where++------------------------------------------------------------------------------+import qualified Data.Map as M+import           Data.Monoid+------------------------------------------------------------------------------+import           Fake.Combinators+import           Fake.Types+------------------------------------------------------------------------------++------------------------------------------------------------------------------+-- | Generates fake locales.  "en_US", "de_CH", etc...+fakeLocale :: FGen String+fakeLocale = elements $ concat $ makeList <$> M.toList localeMap++makeList :: (String, [String]) -> [String]+makeList (k,vs) = map (\v -> k <> "_" <> v) vs++------------------------------------------------------------------------------+-- | A map of all the locales+localeMap :: M.Map String [String]+localeMap = M.fromList+    [ ("aa", ["DJ", "ER", "ET"])+    , ("af", ["ZA"])+    , ("ak", ["GH"])+    , ("am", ["ET"])+    , ("an", ["ES"])+    , ("apn", ["IN"])+    , ("ar", ["AE", "BH", "DJ", "DZ", "EG", "EH", "ER", "IL", "IN"+             ,"IQ", "JO", "KM", "KW", "LB", "LY", "MA", "MR", "OM"+             ,"PS", "QA", "SA", "SD", "SO", "SS", "SY", "TD", "TN", "YE"])+    , ("as", ["IN"])+    , ("ast", ["ES"])+    , ("ayc", ["PE"])+    , ("az", ["AZ", "IN"])+    , ("be", ["BY"])+    , ("bem", ["ZM"])+    , ("ber", ["DZ", "MA"])+    , ("bg", ["BG"])+    , ("bhb", ["IN"])+    , ("bho", ["IN"])+    , ("bn", ["BD", "IN"])+    , ("bo", ["CN", "IN"])+    , ("br", ["FR"])+    , ("brx", ["IN"])+    , ("bs", ["BA"])+    , ("byn", ["ER"])+    , ("ca", ["AD", "ES", "FR", "IT"])+    , ("ce", ["RU"])+    , ("ckb", ["IQ"])+    , ("cmn", ["TW"])+    , ("crh", ["UA"])+    , ("cs", ["CZ"])+    , ("csb", ["PL"])+    , ("cv", ["RU"])+    , ("cy", ["GB"])+    , ("da", ["DK"])+    , ("de", ["AT", "BE", "CH", "DE", "LI", "LU"])+    , ("doi", ["IN"])+    , ("dv", ["MV"])+    , ("dz", ["BT"])+    , ("el", ["GR", "CY"])+    , ("en", ["AG", "AU", "BW", "CA", "DK", "GB", "HK", "IE", "IN", "NG"+             ,"NZ", "PH", "SG", "US", "ZA", "ZM", "ZW"])+    , ("eo", ["US"])+    , ("es", ["AR", "BO", "CL", "CO", "CR", "CU", "DO", "EC", "ES", "GT"+             ,"HN", "MX", "NI", "PA", "PE", "PR", "PY", "SV", "US", "UY", "VE"])+    , ("et", ["EE"])+    , ("eu", ["ES", "FR"])+    , ("fa", ["IR"])+    , ("ff", ["SN"])+    , ("fi", ["FI"])+    , ("fil", ["PH"])+    , ("fo", ["FO"])+    , ("fr", ["CA", "CH", "FR", "LU"])+    , ("fur", ["IT"])+    , ("fy", ["NL", "DE"])+    , ("ga", ["IE"])+    , ("gd", ["GB"])+    , ("gez", ["ER", "ET"])+    , ("gl", ["ES"])+    , ("gu", ["IN"])+    , ("gv", ["GB"])+    , ("ha", ["NG"])+    , ("hak", ["TW"])+    , ("he", ["IL"])+    , ("hi", ["IN"])+    , ("hne", ["IN"])+    , ("hr", ["HR"])+    , ("hsb", ["DE"])+    , ("ht", ["HT"])+    , ("hu", ["HU"])+    , ("hy", ["AM"])+    , ("ia", ["FR"])+    , ("id", ["ID"])+    , ("ig", ["NG"])+    , ("ik", ["CA"])+    , ("is", ["IS"])+    , ("it", ["CH", "IT"])+    , ("iu", ["CA"])+    , ("iw", ["IL"])+    , ("ja", ["JP"])+    , ("ka", ["GE"])+    , ("kk", ["KZ"])+    , ("kl", ["GL"])+    , ("km", ["KH"])+    , ("kn", ["IN"])+    , ("ko", ["KR"])+    , ("kok", ["IN"])+    , ("ks", ["IN"])+    , ("ku", ["TR"])+    , ("kw", ["GB"])+    , ("ky", ["KG"])+    , ("lb", ["LU"])+    , ("lg", ["UG"])+    , ("li", ["BE", "NL"])+    , ("lij", ["IT"])+    , ("ln", ["CD"])+    , ("lo", ["LA"])+    , ("lt", ["LT"])+    , ("lv", ["LV"])+    , ("lzh", ["TW"])+    , ("mag", ["IN"])+    , ("mai", ["IN"])+    , ("mg", ["MG"])+    , ("mhr", ["RU"])+    , ("mi", ["NZ"])+    , ("mk", ["MK"])+    , ("ml", ["IN"])+    , ("mn", ["MN"])+    , ("mni", ["IN"])+    , ("mr", ["IN"])+    , ("ms", ["MY"])+    , ("mt", ["MT"])+    , ("my", ["MM"])+    , ("nan", ["TW"])+    , ("nb", ["NO"])+    , ("nds", ["DE", "NL"])+    , ("ne", ["NP"])+    , ("nhn", ["MX"])+    , ("niu", ["NU", "NZ"])+    , ("nl", ["AW", "BE", "NL"])+    , ("nn", ["NO"])+    , ("nr", ["ZA"])+    , ("nso", ["ZA"])+    , ("oc", ["FR"])+    , ("om", ["ET", "KE"])+    , ("or", ["IN"])+    , ("os", ["RU"])+    , ("pa", ["IN", "PK"])+    , ("pap", ["AN", "AW", "CW"])+    , ("pl", ["PL"])+    , ("ps", ["AF"])+    , ("pt", ["BR", "PT"])+    , ("quz", ["PE"])+    , ("raj", ["IN"])+    , ("ro", ["RO"])+    , ("ru", ["RU", "UA"])+    , ("rw", ["RW"])+    , ("sa", ["IN"])+    , ("sat", ["IN"])+    , ("sc", ["IT"])+    , ("sd", ["IN", "PK"])+    , ("se", ["NO"])+    , ("shs", ["CA"])+    , ("si", ["LK"])+    , ("sid", ["ET"])+    , ("sk", ["SK"])+    , ("sl", ["SI"])+    , ("so", ["DJ", "ET", "KE", "SO"])+    , ("sq", ["AL", "ML"])+    , ("sr", ["ME", "RS"])+    , ("ss", ["ZA"])+    , ("st", ["ZA"])+    , ("sv", ["FI", "SE"])+    , ("sw", ["KE", "TZ"])+    , ("szl", ["PL"])+    , ("ta", ["IN", "LK"])+    , ("tcy", ["IN"])+    , ("te", ["IN"])+    , ("tg", ["TJ"])+    , ("th", ["TH"])+    , ("the", ["NP"])+    , ("ti", ["ER", "ET"])+    , ("tig", ["ER"])+    , ("tk", ["TM"])+    , ("tl", ["PH"])+    , ("tn", ["ZA"])+    , ("tr", ["CY", "TR"])+    , ("ts", ["ZA"])+    , ("tt", ["RU"])+    , ("ug", ["CN"])+    , ("uk", ["UA"])+    , ("unm", ["US"])+    , ("ur", ["IN", "PK"])+    , ("uz", ["UZ"])+    , ("ve", ["ZA"])+    , ("vi", ["VN"])+    , ("wa", ["BE"])+    , ("wae", ["CH"])+    , ("wal", ["ET"])+    , ("wo", ["SN"])+    , ("xh", ["ZA"])+    , ("yi", ["US"])+    , ("yo", ["NG"])+    , ("yue", ["HK"])+    , ("zh", ["CN", "HK", "SG", "TW"])+    , ("zu", ["ZA"])+    ]
+ src/Fake/Provider/Person/EN_US.hs view
@@ -0,0 +1,1116 @@+{-# LANGUAGE OverloadedStrings #-}++module Fake.Provider.Person.EN_US where++------------------------------------------------------------------------------+import           Data.Text (Text)+------------------------------------------------------------------------------+import Fake.Combinators+import Fake.Provider.Lang+import Fake.Types+------------------------------------------------------------------------------++personName :: FGen Text+personName = oneof [femaleName, maleName]++femaleName :: FGen Text+femaleName = phraseText <$> frequency+    [ (5, phrase [femaleFirstName, lastName])+    , (1, phrase [femalePrefix, femaleFirstName, lastName])+    , (1, phrase [femaleFirstName, lastName, femaleSuffix])+    , (1, phrase [femalePrefix, femaleFirstName, lastName, femaleSuffix])+    ]++maleName :: FGen Text+maleName = phraseText <$> frequency+    [ (5, phrase [maleFirstName, lastName])+    , (1, phrase [malePrefix, maleFirstName, lastName])+    , (1, phrase [maleFirstName, lastName, maleSuffix])+    , (1, phrase [malePrefix, maleFirstName, lastName, maleSuffix])+    ]++femalePrefix :: FGen SingleWord+femalePrefix = elements ["Mrs.", "Ms.", "Miss", "Dr."]++malePrefix :: FGen SingleWord+malePrefix = elements ["Mr.", "Dr."]++femaleSuffix :: FGen SingleWord+femaleSuffix = elements ["MD", "DDS", "PhD", "DVM"]++maleSuffix :: FGen SingleWord+maleSuffix = elements+    ["Jr.", "Sr.", "I", "II", "III","IV", "V", "MD", "DDS", "PhD", "DVM"]++firstName :: FGen SingleWord+firstName = oneof [femaleFirstName, maleFirstName]++femaleFirstName :: FGen SingleWord+femaleFirstName = elements $ map SingleWord+    [ "Aaliyah", "Abagail", "Abbey", "Abbie", "Abbigail", "Abby", "Abigail"+    , "Abigale", "Abigayle", "Abril", "Achsah", "Ada", "Adah", "Adaline"+    , "Adalyn", "Adalynn", "Adamaris", "Adda", "Addie", "Addison", "Addisyn"+    , "Addyson", "Adel", "Adela", "Adelaide", "Adele", "Adelia", "Adelina"+    , "Adeline", "Adell", "Adella", "Adelle", "Adelyn", "Adelynn", "Adilene"+    , "Adina", "Adison", "Adline", "Adria", "Adriana", "Adriane", "Adrianna"+    , "Adrianne", "Adriene", "Adrienne", "Adyson", "Affie", "Afton", "Agatha"+    , "Aggie", "Agnes", "Agness", "Agusta", "Aida", "Aileen", "Ailene"+    , "Aili", "Aimee", "Ainsley", "Aisha", "Aiyana", "Aiyanna", "Aja"+    , "Akeelah", "Akira", "Ala", "Alabama", "Alaina", "Alana", "Alani"+    , "Alanna", "Alannah", "Alaya", "Alayna", "Alba", "Alberta", "Albertha"+    , "Albertina", "Albertine", "Albina", "Alcie", "Alda", "Aldona", "Aleah"+    , "Alease", "Alecia", "Aleen", "Aleena", "Alejandra", "Alena", "Alene"+    , "Alesha", "Alesia", "Alessandra", "Aleta", "Aletha", "Alethea", "Alex"+    , "Alexa", "Alexandr", "Alexandra", "Alexandrea", "Alexandria", "Alexia"+    , "Alexina", "Alexis", "Alexus", "Alexys", "Alfreda", "Alia", "Aliana"+    , "Alice", "Alicia", "Alida", "Alina", "Aline", "Alisa", "Alisha"+    , "Alison", "Alissa", "Alisson", "Alivia", "Aliya", "Aliyah", "Aliza"+    , "Alize", "Alla", "Allean", "Alleen", "Allena", "Allene", "Allie"+    , "Alline", "Allison", "Allisson", "Ally", "Allyson", "Allyssa", "Alma"+    , "Almeda", "Almedia", "Almeta", "Almina", "Almira", "Almyra", "Aloma"+    , "Alondra", "Alpha", "Alphonsine", "Alta", "Altha", "Althea", "Altie"+    , "Alvena", "Alvera", "Alverda", "Alverta", "Alvina", "Alvira", "Alwilda"+    , "Alwina", "Alwine", "Alyce", "Alycia", "Alys", "Alysa", "Alyse"+    , "Alysha", "Alysia", "Alyson", "Alyssa", "Alyssia", "Alyvia", "Alzina"+    , "Ama", "Amalia", "Amalie", "Amanda", "Amani", "Amara", "Amari"+    , "Amaris", "Amaya", "Amber", "Amberly", "Amelia", "Amelie", "America"+    , "Amey", "Ami", "Amiah", "Amie", "Amina", "Amira", "Amirah", "Amiya"+    , "Amiyah", "Amma", "Ammie", "Amparo", "Amy", "Amya", "Ana", "Anabel"+    , "Anabella", "Anabelle", "Anahi", "Anais", "Analia", "Anastacia"+    , "Anastasia", "Anaya", "Andra", "Andrea", "Andria", "Angel", "Angela"+    , "Angele", "Angeles", "Angelia", "Angelic", "Angelica", "Angelina"+    , "Angeline", "Angelique", "Angelita", "Angella", "Angie", "Anice"+    , "Anie", "Anika", "Anissa", "Anita", "Anitra", "Aniya", "Aniyah"+    , "Anjali", "Anjanette", "Anjelica", "Ann", "Anna", "Annabel", "Annabell"+    , "Annabella", "Annabelle", "Annalise", "Annamae", "Annamarie", "Anne"+    , "Anneliese", "Annemarie", "Anner", "Annetta", "Annette", "Annice"+    , "Annie", "Annika", "Annis", "Annmarie", "Anona", "Ansley", "Antionette"+    , "Antoinette", "Antonetta", "Antonette", "Antonia", "Antonina", "Anya"+    , "April", "Ara", "Arabella", "Araceli", "Aracely", "Arah", "Araminta"+    , "Ardath", "Ardelia", "Ardell", "Ardella", "Ardelle", "Arden", "Ardeth"+    , "Ardis", "Ardith", "Ardyce", "Areli", "Arely", "Aretha", "Argie"+    , "Aria", "Ariana", "Ariane", "Arianna", "Arie", "Ariel", "Ariella"+    , "Arielle", "Arietta", "Arizona", "Arkie", "Arla", "Arleen", "Arlena"+    , "Arlene", "Arleth", "Arletta", "Arley", "Arlie", "Arline", "Arly"+    , "Arlyne", "Armani", "Armida", "Arminda", "Arminta", "Arnetta", "Arra"+    , "Arrie", "Arta", "Artelia", "Arvilla", "Aryana", "Aryanna", "Asha"+    , "Ashanti", "Ashely", "Ashlea", "Ashlee", "Ashleigh", "Ashley", "Ashli"+    , "Ashlie", "Ashly", "Ashlyn", "Ashlynn", "Ashtyn", "Asia", "Ason"+    , "Aspen", "Assunta", "Astrid", "Atha", "Athena", "Attie", "Aubree"+    , "Aubrey", "Aubrie", "Audie", "Audra", "Audrey", "Audriana", "Audrianna"+    , "Audrina", "Audry", "Augusta", "Augustina", "Aura", "Aurelia"+    , "Aurilla", "Aurora", "Aurore", "Autumn", "Ava", "Avah", "Averi"+    , "Averie", "Avie", "Avis", "Ayana", "Ayanna", "Ayesha", "Ayla", "Ayleen"+    , "Aylin", "Azalee", "Azaria", "Azariah", "Azul", "Azzie", "Babette"+    , "Baby", "Bailee", "Bailey", "Bama", "Bambi", "Barb", "Barbara"+    , "Barbie", "Barbra", "Baylee", "Baylie", "Bea", "Beadie", "Beatrice"+    , "Beatrix", "Beatriz", "Beaulah", "Bebe", "Beckie", "Becky", "Beda"+    , "Bee", "Belen", "Belia", "Belinda", "Bell", "Bella", "Belle", "Belva"+    , "Bena", "Benita", "Bennie", "Berdie", "Berenice", "Bernadette"+    , "Bernadine", "Bernardine", "Berneice", "Bernetta", "Bernice"+    , "Berniece", "Bernita", "Berta", "Bertha", "Bertie", "Bertina", "Beryl"+    , "Bess", "Besse", "Bessie", "Beth", "Betha", "Bethann", "Bethany"+    , "Bethel", "Bethzy", "Betsey", "Betsy", "Bette", "Bettie", "Bettina"+    , "Betty", "Bettye", "Bettyjane", "Bettylou", "Beula", "Beulah", "Bev"+    , "Beverlee", "Beverley", "Beverly", "Beyonce", "Bianca", "Biddie"+    , "Billie", "Billy", "Billye", "Bina", "Bird", "Birdella", "Birdie"+    , "Birtha", "Birtie", "Blair", "Blake", "Blanca", "Blanch", "Blanche"+    , "Blanchie", "Blossom", "Bobbi", "Bobbie", "Bobby", "Bobbye", "Bonita"+    , "Bonnie", "Bonny", "Braelyn", "Brande", "Brandee", "Brandi", "Brandie"+    , "Brandon", "Brandy", "Brea", "Breana", "Breann", "Breanna", "Breanne"+    , "Bree", "Brenda", "Brenna", "Breonna", "Brett", "Bria", "Briana"+    , "Brianda", "Brianna", "Brianne", "Bridget", "Bridgett", "Bridgette"+    , "Brielle", "Brigette", "Brigid", "Brigitte", "Briley", "Brinda"+    , "Brinley", "Brionna", "Brisa", "Bristol", "Britany", "Britney"+    , "Britni", "Britny", "Britt", "Britta", "Brittaney", "Brittani"+    , "Brittanie", "Brittany", "Brittnay", "Brittnee", "Brittney", "Brittni"+    , "Brittnie", "Brittny", "Brook", "Brooke", "Brooklyn", "Brooklynn"+    , "Bryana", "Bryanna", "Brylee", "Bryn", "Brynlee", "Brynn", "Buelah"+    , "Buena", "Buffy", "Bula", "Bulah", "Buna", "Burnice", "Byrd", "Byrdie"+    , "Caddie", "Cadence", "Cailyn", "Caitlin", "Caitlyn", "Caitlynn"+    , "Caldonia", "Caleigh", "Cali", "Calista", "Calla", "Calleigh", "Callie"+    , "Cambria", "Cameron", "Cami", "Camila", "Camilla", "Camille", "Camisha"+    , "Cammie", "Campbell", "Camryn", "Candace", "Candi", "Candice"+    , "Candida", "Candis", "Candy", "Candyce", "Cannie", "Capitola", "Cappie"+    , "Caprice", "Cara", "Caren", "Carey", "Cari", "Carie", "Carin", "Carina"+    , "Carisa", "Carissa", "Carla", "Carlee", "Carleen", "Carleigh"+    , "Carlene", "Carley", "Carli", "Carlie", "Carlota", "Carlotta", "Carly"+    , "Carlyn", "Carma", "Carmel", "Carmela", "Carmelita", "Carmella"+    , "Carmen", "Caro", "Carol", "Carolann", "Carole", "Carolee", "Carolina"+    , "Caroline", "Carolyn", "Carolyne", "Carolynn", "Caron", "Carra"+    , "Carri", "Carrie", "Carrol", "Carroll", "Carry", "Carson", "Cary"+    , "Caryl", "Caryn", "Casandra", "Casey", "Casie", "Cassandra", "Cassidy"+    , "Cassie", "Cassondra", "Catalina", "Catharine", "Catherine", "Cathern"+    , "Cathey", "Cathi", "Cathie", "Cathleen", "Cathrine", "Cathryn", "Cathy"+    , "Catina", "Catrina", "Caydence", "Cayla", "Caylee", "Cecelia", "Cecile"+    , "Cecilia", "Cecily", "Ceil", "Celena", "Celesta", "Celeste", "Celestia"+    , "Celestine", "Celia", "Celie", "Celina", "Celine", "Cena", "Ceola"+    , "Chaka", "Chana", "Chanda", "Chandler", "Chandra", "Chanel", "Chanelle"+    , "Chaney", "Chanie", "Channie", "Channing", "Chantal", "Chante"+    , "Chantel", "Chantelle", "Charissa", "Charisse", "Charity", "Charla"+    , "Charlee", "Charleen", "Charlene", "Charley", "Charlie", "Charline"+    , "Charlize", "Charlotta", "Charlotte", "Charlottie", "Charlsie"+    , "Charmaine", "Charolette", "Chase", "Chasity", "Chastity", "Chaya"+    , "Chelsea", "Chelsey", "Chelsi", "Chelsie", "Chelsy", "Cher", "Cherelle"+    , "Cheri", "Cherie", "Cherilyn", "Cherise", "Cherish", "Cherrelle"+    , "Cherri", "Cherrie", "Cherry", "Cherryl", "Cheryl", "Cheryle"+    , "Cheryll", "Chessie", "Chestina", "Cheyanne", "Cheyenne", "Chimere"+    , "China", "Chiquita", "Chloe", "Chloie", "Chris", "Chrissie", "Chrissy"+    , "Christa", "Christal", "Christeen", "Christel", "Christen", "Christena"+    , "Christene", "Christi", "Christian", "Christiana", "Christie"+    , "Christin", "Christina", "Christine", "Christy", "Chrystal", "Chyna"+    , "Chynna", "Ciara", "Ciarra", "Cicely", "Cielo", "Ciera", "Cierra"+    , "Ciji", "Cilla", "Cinda", "Cindi", "Cindy", "Cinnamon", "Cinthia"+    , "Citlali", "Citlalli", "Clair", "Claire", "Clara", "Clarabelle"+    , "Clare", "Claribel", "Clarice", "Clarinda", "Clarine", "Clarisa"+    , "Clarissa", "Classie", "Claudette", "Claudia", "Claudie", "Claudine"+    , "Cleda", "Clella", "Clem", "Clemence", "Clementina", "Clementine"+    , "Clemie", "Clemma", "Clemmie", "Cleo", "Cleola", "Cleone", "Cleora"+    , "Cleta", "Cleva", "Clevie", "Cliffie", "Cloe", "Clora", "Clotilda"+    , "Clotilde", "Clyda", "Clydie", "Clytie", "Coleen", "Coletta", "Colette"+    , "Colleen", "Collette", "Columbia", "Concepcion", "Concetta", "Concha"+    , "Connie", "Constance", "Consuela", "Consuelo", "Contina", "Cora"+    , "Coraima", "Coral", "Coralie", "Corda", "Cordelia", "Cordella"+    , "Cordia", "Cordie", "Corean", "Corene", "Coretta", "Corey", "Cori"+    , "Corie", "Corina", "Corine", "Corinna", "Corinne", "Corliss"+    , "Cornelia", "Cornie", "Corrie", "Corrina", "Corrine", "Cortney", "Cory"+    , "Courtney", "Creola", "Cressie", "Crete", "Crissie", "Crissy", "Crista"+    , "Cristal", "Cristen", "Cristi", "Cristin", "Cristina", "Cristine"+    , "Cristy", "Cruz", "Crysta", "Crystal", "Cuba", "Cydney", "Cyndi"+    , "Cyntha", "Cynthia", "Dafne", "Dagmar", "Dagny", "Dahlia", "Daija"+    , "Daijah", "Daisey", "Daisha", "Daisie", "Daisy", "Daisye", "Daja"+    , "Dakota", "Dale", "Dalia", "Dallas", "Damaris", "Dana", "Danae"+    , "Daneen", "Danelle", "Danette", "Dani", "Dania", "Danica", "Daniela"+    , "Daniele", "Daniella", "Danielle", "Danika", "Danita", "Danna"+    , "Dannie", "Dannielle", "Danyel", "Danyell", "Danyelle", "Daphne"+    , "Dara", "Darby", "Darci", "Darcie", "Darcy", "Daria", "Darian"+    , "Dariana", "Darla", "Darleen", "Darlene", "Darline", "Darlyne", "Dasia"+    , "Davina", "Dawn", "Dawna", "Dawne", "Dayami", "Dayana", "Dayanara"+    , "Dayle", "Dayna", "Dayse", "Deana", "Deandra", "Deann", "Deanna"+    , "Deanne", "Deasia", "Deb", "Debbi", "Debbie", "Debbra", "Debby"+    , "Debera", "Debi", "Debora", "Deborah", "Deborrah", "Debra", "Debrah"+    , "Debroah", "Dedra", "Dee", "Deeann", "Deedee", "Deena", "Deetta"+    , "Deidra", "Deidre", "Deirdre", "Deja", "Dejah", "Delaney", "Delcie"+    , "Delfina", "Delia", "Deliah", "Delila", "Delilah", "Delina", "Delinda"+    , "Delisa", "Dell", "Della", "Dellar", "Delle", "Dellia", "Dellie"+    , "Delma", "Delois", "Delora", "Delores", "Deloris", "Delpha", "Delphia"+    , "Delphine", "Delsie", "Delta", "Dema", "Demetra", "Demetria", "Demi"+    , "Dena", "Deneen", "Denese", "Denice", "Denine", "Denise", "Denisha"+    , "Denisse", "Denita", "Dennie", "Desirae", "Desiree", "Dessa", "Dessie"+    , "Destany", "Destinee", "Destiney", "Destini", "Destiny", "Devan"+    , "Devin", "Devon", "Devyn", "Dewey", "Deyanira", "Dezzie", "Diamond"+    , "Dian", "Diana", "Diandra", "Diane", "Diann", "Dianna", "Dianne"+    , "Dicie", "Dicy", "Dillie", "Dimple", "Dina", "Dinah", "Dione", "Dionne"+    , "Dixie", "Diya", "Djuana", "Djuna", "Docia", "Dola", "Dollie", "Dolly"+    , "Dollye", "Dolores", "Doloris", "Domenica", "Dominga", "Dominique"+    , "Dominque", "Domonique", "Dona", "Donia", "Donie", "Donita", "Donna"+    , "Donnie", "Dora", "Dorathea", "Dorathy", "Dorcas", "Doreen", "Dorene"+    , "Doretha", "Doretta", "Dori", "Dorinda", "Dorine", "Doris", "Dorla"+    , "Dorotha", "Dorothea", "Dorothy", "Dorris", "Dortha", "Dorthea"+    , "Dorthey", "Dorthy", "Dosha", "Doshia", "Doshie", "Dosia", "Dossie"+    , "Dot", "Dottie", "Dotty", "Dove", "Dovie", "Drema", "Drew", "Drucilla"+    , "Drusilla", "Dulce", "Dulcie", "Dusty", "Dwan", "Dyan", "Dylan"+    , "Earlean", "Earlene", "Earlie", "Earline", "Earnestine", "Eartha"+    , "Easter", "Eathel", "Ebba", "Eboni", "Ebony", "Echo", "Eda", "Eddie"+    , "Eden", "Edie", "Edith", "Edla", "Edmonia", "Edna", "Ednah", "Edra"+    , "Edrie", "Edris", "Edwina", "Edyth", "Edythe", "Effa", "Effie"+    , "Eileen", "Eithel", "Ela", "Elaina", "Elaine", "Elana", "Elayne"+    , "Elba", "Elberta", "Elda", "Eldora", "Eleanor", "Eleanora", "Eleanore"+    , "Elease", "Electa", "Elena", "Elenor", "Elenora", "Elenore", "Eleonora"+    , "Eleonore", "Elfie", "Elfreda", "Elfrieda", "Elgie", "Elia", "Eliana"+    , "Elianna", "Elida", "Elinor", "Elinore", "Elisa", "Elisabeth", "Elise"+    , "Elisha", "Elissa", "Eliza", "Elizabet", "Elizabeth", "Elizbeth"+    , "Elizebeth", "Ella", "Ellamae", "Ellar", "Elle", "Ellen", "Eller"+    , "Elliana", "Ellie", "Ellyn", "Elma", "Elmina", "Elmira", "Elmire"+    , "Elmyra", "Elna", "Elnora", "Elodie", "Elois", "Eloisa", "Eloise"+    , "Elouise", "Elsa", "Else", "Elsie", "Elta", "Elva", "Elvera", "Elvia"+    , "Elvie", "Elvina", "Elvira", "Elwanda", "Elyse", "Elyssa", "Elza"+    , "Elzada", "Ema", "Emaline", "Ember", "Emelia", "Emelie", "Emeline"+    , "Emely", "Emerald", "Emerson", "Emery", "Emilee", "Emilia", "Emilie"+    , "Emily", "Emma", "Emmalee", "Emmaline", "Emmer", "Emmie", "Emmy"+    , "Emogene", "Ena", "Enid", "Enola", "Enriqueta", "Eola", "Eppie"+    , "Epsie", "Era", "Erica", "Ericka", "Erie", "Erika", "Erin", "Eris"+    , "Erla", "Erlene", "Erlinda", "Erline", "Erma", "Ermina", "Ermine"+    , "Erna", "Ernestina", "Ernestine", "Erykah", "Eryn", "Esmeralda"+    , "Esperanza", "Essa", "Essence", "Essie", "Esta", "Estefani"+    , "Estefania", "Estefany", "Estela", "Estell", "Estella", "Estelle"+    , "Ester", "Esther", "Estie", "Estrella", "Etha", "Ethel", "Ethelene"+    , "Ethelyn", "Ether", "Ethie", "Ethyl", "Ethyle", "Etna", "Etta", "Etter"+    , "Ettie", "Eudora", "Eugenia", "Eugenie", "Eula", "Eulah", "Eulalia"+    , "Eulalie", "Euna", "Eunice", "Euphemia", "Eura", "Eva", "Evalena"+    , "Evaline", "Evalyn", "Evangelina", "Evangeline", "Eve", "Evelena"+    , "Evelin", "Evelina", "Eveline", "Evelyn", "Evelyne", "Evelynn", "Ever"+    , "Evette", "Evia", "Evie", "Evita", "Evon", "Evonne", "Exa", "Exie"+    , "Fabiola", "Fae", "Fairy", "Faith", "Fallon", "Falon", "Fannie"+    , "Fanny", "Fannye", "Farah", "Farrah", "Fatima", "Fawn", "Fay", "Faye"+    , "Felecia", "Felice", "Felicia", "Felicie", "Felicitas", "Felicity"+    , "Felipa", "Felisha", "Fern", "Fernanda", "Ferne", "Fidelia", "Filomena"+    , "Finley", "Fiona", "Flavia", "Fleda", "Fleeta", "Fleta", "Flo"+    , "Flonnie", "Flor", "Flora", "Florance", "Florence", "Florene"+    , "Floretta", "Florida", "Florie", "Florine", "Florrie", "Flossie"+    , "Floy", "Fonda", "Forest", "Fran", "Franc", "Frances", "Francesca"+    , "Francies", "Francina", "Francine", "Francis", "Francisca"+    , "Francisquita", "Frankie", "Freda", "Freddie", "Frederica"+    , "Fredericka", "Freeda", "Freida", "Frida", "Frieda", "Frona", "Fronia"+    , "Fronie", "Fronnie", "Fumiko", "Gabriela", "Gabriella", "Gabrielle"+    , "Gail", "Gale", "Galilea", "Garnet", "Garnett", "Gay", "Gaye", "Gayla"+    , "Gayle", "Gaylene", "Gaynell", "Gearldine", "Gemma", "Gena", "Gene"+    , "Genesis", "Geneva", "Genevieve", "Genevra", "Genie", "Gennie"+    , "Genoveva", "Georganna", "Georgeann", "Georgeanna", "Georgene"+    , "Georgetta", "Georgette", "Georgia", "Georgiana", "Georgiann"+    , "Georgianna", "Georgie", "Georgina", "Georgine", "Geraldine", "Geralyn"+    , "Gerda", "Geri", "Germaine", "Gerri", "Gerry", "Gertha", "Gertie"+    , "Gertrude", "Gia", "Giada", "Giana", "Gianna", "Gidget", "Gigi"+    , "Gilda", "Gillian", "Gillie", "Gina", "Ginger", "Ginny", "Giovanna"+    , "Girtha", "Gisele", "Giselle", "Gisselle", "Giuliana", "Gladis"+    , "Gladyce", "Gladys", "Glenda", "Glendora", "Glenn", "Glenna", "Glennie"+    , "Glennis", "Glinda", "Gloria", "Glynda", "Glynis", "Golda", "Golden"+    , "Goldia", "Goldie", "Grace", "Gracelyn", "Gracia", "Gracie", "Graciela"+    , "Grayce", "Grecia", "Gregoria", "Greta", "Gretchen", "Gretta", "Grisel"+    , "Griselda", "Guadalupe", "Gunda", "Gussie", "Gusta", "Gustie", "Gwen"+    , "Gwenda", "Gwendolyn", "Gwyn", "Gwyneth", "Hadassah", "Hadley"+    , "Hailee", "Hailey", "Hailie", "Haleigh", "Haley", "Hali", "Halie"+    , "Halle", "Halley", "Hallie", "Hana", "Hanna", "Hannah", "Harlene"+    , "Harley", "Harlow", "Harmony", "Harper", "Harriet", "Harriett"+    , "Harriette", "Haruko", "Hasel", "Hassie", "Hattie", "Haven", "Hayden"+    , "Haylee", "Hayleigh", "Hayley", "Haylie", "Hazel", "Hazelle", "Hazle"+    , "Heather", "Heaven", "Hedwig", "Hedy", "Heidi", "Heidy", "Helaine"+    , "Helen", "Helena", "Helene", "Helga", "Hellen", "Helma", "Helyn"+    , "Hennie", "Henretta", "Henrietta", "Henriette", "Herlinda", "Herma"+    , "Hermina", "Hermine", "Herminia", "Hertha", "Hessie", "Hester"+    , "Hettie", "Hetty", "Hilah", "Hilary", "Hilda", "Hildegard"+    , "Hildegarde", "Hildred", "Hildur", "Hillary", "Hilma", "Holli"+    , "Hollie", "Hollis", "Holly", "Honora", "Hope", "Hortencia", "Hortense"+    , "Hortensia", "Hulda", "Huldah", "Hunter", "Ica", "Icey", "Icie", "Icy"+    , "Ida", "Idabelle", "Idamae", "Idell", "Idella", "Iesha", "Ieshia"+    , "Ila", "Ilah", "Ilda", "Ilene", "Iliana", "Illa", "Ilma", "Ilo"+    , "Ilona", "Ima", "Imani", "Imelda", "Imo", "Imogene", "Ina", "India"+    , "Indiana", "Inell", "Ines", "Inez", "Infant", "Inga", "Ingeborg"+    , "Inger", "Ingrid", "Iola", "Iona", "Ione", "Ira", "Ireland", "Irena"+    , "Irene", "Iridian", "Irine", "Iris", "Irma", "Irva", "Isa", "Isabel"+    , "Isabela", "Isabell", "Isabella", "Isabelle", "Isadora", "Isamar"+    , "Isis", "Isla", "Isobel", "Itzel", "Iva", "Ivah", "Ivana", "Ivanna"+    , "Ivette", "Ivey", "Ivie", "Ivonne", "Ivory", "Ivy", "Iyana", "Iyanna"+    , "Iza", "Izabella", "Izabelle", "Izetta", "Izola", "Izora", "Jacalyn"+    , "Jacey", "Jackeline", "Jacki", "Jackie", "Jacklyn", "Jaclyn", "Jacque"+    , "Jacquelin", "Jacqueline", "Jacquelyn", "Jacquline", "Jacqulyn", "Jada"+    , "Jade", "Jaden", "Jadyn", "Jaeda", "Jaelyn", "Jaelynn", "Jaida"+    , "Jaiden", "Jaidyn", "Jailene", "Jailyn", "Jaime", "Jaimee", "Jakayla"+    , "Jaleesa", "Jalisa", "Jalissa", "Jaliyah", "Jalyn", "Jalynn", "Jamey"+    , "Jami", "Jamie", "Jamila", "Jamiya", "Jammie", "Jamya", "Jan", "Jana"+    , "Janae", "Janay", "Jane", "Janeen", "Janel", "Janell", "Janelle"+    , "Janene", "Janessa", "Janet", "Janette", "Janey", "Janiah", "Janice"+    , "Janie", "Janine", "Janis", "Janiya", "Janiyah", "Jann", "Janna"+    , "Jannette", "Jannie", "January", "Janyce", "Jaquelin", "Jaqueline"+    , "Jaslene", "Jaslyn", "Jasmin", "Jasmine", "Jasmyn", "Jasmyne"+    , "Jaunita", "Jaycee", "Jaycie", "Jayda", "Jayde", "Jayden", "Jaye"+    , "Jayla", "Jaylah", "Jaylee", "Jayleen", "Jaylen", "Jaylene", "Jaylin"+    , "Jaylyn", "Jaylynn", "Jayme", "Jayne", "Jazlene", "Jazlyn", "Jazlynn"+    , "Jazmin", "Jazmine", "Jazmyn", "Jazmyne", "Jean", "Jeana", "Jeane"+    , "Jeanetta", "Jeanette", "Jeanie", "Jeanine", "Jeanmarie", "Jeanna"+    , "Jeanne", "Jeannette", "Jeannie", "Jeannine", "Jeffie", "Jemima"+    , "Jena", "Jenelle", "Jenifer", "Jenilee", "Jenna", "Jennette", "Jenni"+    , "Jennie", "Jennifer", "Jenniffer", "Jenny", "Jensen", "Jeraldine"+    , "Jeri", "Jerica", "Jerilyn", "Jerilynn", "Jerri", "Jerrica", "Jerrie"+    , "Jerrilyn", "Jerusha", "Jeryl", "Jesenia", "Jesica", "Jesse"+    , "Jessenia", "Jessi", "Jessica", "Jessie", "Jessika", "Jessye", "Jetta"+    , "Jettie", "Jewel", "Jewell", "Jill", "Jillian", "Jimena", "Jinnie"+    , "Jo", "Joan", "Joana", "Joanie", "Joann", "Joanna", "Joanne", "Jocelyn"+    , "Jocelyne", "Jocelynn", "Jodi", "Jodie", "Jody", "Joell", "Joella"+    , "Joelle", "Joellen", "Joetta", "Joette", "Johana", "Johanna"+    , "Johannah", "Johnie", "Johnna", "Johnnie", "Joi", "Joleen", "Jolene"+    , "Jolette", "Jolie", "Joline", "Jonell", "Joni", "Jonna", "Jonnie"+    , "Jordan", "Jordin", "Jordyn", "Joretta", "Jorja", "Josefa", "Josefina"+    , "Josefita", "Joselin", "Joseline", "Joselyn", "Josephine", "Josette"+    , "Josie", "Josiephine", "Joslyn", "Jossie", "Journey", "Jovita", "Joy"+    , "Joyce", "Joycelyn", "Joye", "Juana", "Juanita", "Judi", "Judie"+    , "Judith", "Judy", "Judyth", "Jule", "Juli", "Julia", "Juliana"+    , "Juliann", "Julianna", "Julianne", "Julie", "Juliet", "Juliette"+    , "Julisa", "Julissa", "June", "Junia", "Junie", "Justice", "Justina"+    , "Justine", "Kaaren", "Kacey", "Kaci", "Kacie", "Kacy", "Kadence"+    , "Kadijah", "Kaela", "Kaelyn", "Kaelynn", "Kaia", "Kaila", "Kailee"+    , "Kailey", "Kailyn", "Kaitlin", "Kaitlyn", "Kaitlynn", "Kaiya", "Kala"+    , "Kaleena", "Kaleigh", "Kalene", "Kaley", "Kali", "Kalie", "Kaliyah"+    , "Kallie", "Kalyn", "Kamari", "Kameron", "Kami", "Kamila", "Kamilah"+    , "Kamora", "Kamryn", "Kamya", "Kandace", "Kandi", "Kandice", "Kandy"+    , "Kanesha", "Kanisha", "Kara", "Karan", "Karel", "Karen", "Kari"+    , "Karie", "Karin", "Karina", "Karis", "Karissa", "Karla", "Karlee"+    , "Karlene", "Karley", "Karli", "Karlie", "Karly", "Karma", "Karol"+    , "Karolyn", "Karon", "Karren", "Karri", "Karrie", "Karsyn", "Karyl"+    , "Karyme", "Karyn", "Kasandra", "Kasey", "Kasie", "Kassandra", "Kassidy"+    , "Kassie", "Katarina", "Kate", "Katelin", "Katelyn", "Katelynn"+    , "Katerina", "Kathaleen", "Katharina", "Katharine", "Katharyn"+    , "Katherin", "Katherine", "Kathern", "Katheryn", "Kathey", "Kathi"+    , "Kathie", "Kathleen", "Kathlene", "Kathlyn", "Kathrine", "Kathryn"+    , "Kathryne", "Kathy", "Kathyrn", "Kati", "Katia", "Katie", "Katina"+    , "Katlin", "Katlyn", "Katlynn", "Katrina", "Kattie", "Katy", "Kay"+    , "Kaya", "Kaycee", "Kayden", "Kaydence", "Kaye", "Kayla", "Kaylah"+    , "Kaylan", "Kaylee", "Kayleen", "Kayleigh", "Kaylen", "Kaylene"+    , "Kayley", "Kayli", "Kaylie", "Kaylin", "Kaylyn", "Kaylynn", "Kazuko"+    , "Keanna", "Keara", "Kecia", "Keeley", "Keely", "Keena", "Keesha"+    , "Keila", "Keira", "Keisha", "Kelcie", "Keli", "Kelis", "Kellee"+    , "Kelley", "Kelli", "Kellie", "Kelly", "Kelsea", "Kelsey", "Kelsi"+    , "Kelsie", "Kendal", "Kendall", "Kendra", "Kenia", "Kenisha", "Kenley"+    , "Kenna", "Kennedi", "Kennedy", "Kenya", "Kenyatta", "Kenzie", "Keri"+    , "Kerri", "Kerrie", "Kerry", "Kesha", "Keshia", "Keyla", "Khadijah"+    , "Khalilah", "Khloe", "Kia", "Kiana", "Kianna", "Kiara", "Kiarra"+    , "Kiera", "Kierra", "Kiersten", "Kiley", "Kim", "Kimber", "Kimberely"+    , "Kimberlee", "Kimberley", "Kimberli", "Kimberlie", "Kimberly", "Kimora"+    , "Kindra", "Kinley", "Kinsey", "Kinsley", "Kira", "Kirsten", "Kirstie"+    , "Kirstin", "Kisha", "Kittie", "Kitty", "Kiya", "Kiyoko", "Kizzie"+    , "Kizzy", "Kloe", "Kori", "Kortney", "Kourtney", "Kris", "Krissy"+    , "Krista", "Kristal", "Kristan", "Kristen", "Kristi", "Kristian"+    , "Kristie", "Kristin", "Kristina", "Kristine", "Kristy", "Kristyn"+    , "Krysta", "Krystal", "Krysten", "Krystin", "Krystina", "Krystle", "Kya"+    , "Kyara", "Kyla", "Kylah", "Kyle", "Kylee", "Kyleigh", "Kylene", "Kylie"+    , "Kyra", "Kyrie", "Lacey", "Laci", "Lacie", "Lacy", "Ladonna", "Lady"+    , "Lahoma", "Laila", "Lailah", "Lainey", "Laisha", "Lakeisha", "Laken"+    , "Lakendra", "Lakesha", "Lakeshia", "Lakisha", "Lala", "Lalla", "Lana"+    , "Lanette", "Laney", "Lani", "Lanie", "Lanita", "Lannie", "Laquita"+    , "Lara", "Larae", "Laraine", "Larissa", "Larue", "Lashanda", "Lashawn"+    , "Lashonda", "Lashunda", "Lasonya", "Lassie", "Latanya", "Latarsha"+    , "Latasha", "Latesha", "Latifah", "Latisha", "Latonia", "Latonya"+    , "Latoria", "Latosha", "Latoya", "Latoyia", "Latrice", "Latricia"+    , "Latrina", "Launa", "Laura", "Laureen", "Laurel", "Lauren", "Laurene"+    , "Lauretta", "Laurette", "Lauri", "Laurie", "Laurine", "Lauryn"+    , "Lavada", "Lavelle", "Lavenia", "Lavera", "Lavern", "Laverna"+    , "Laverne", "Lavina", "Lavinia", "Lavon", "Lavona", "Lavonda", "Lavonia"+    , "Lavonne", "Lawanda", "Layla", "Laylah", "Lea", "Leafy", "Leah"+    , "Leala", "Leana", "Leandra", "Leaner", "Leann", "Leanna", "Leanne"+    , "Leatha", "Leatrice", "Leda", "Lee", "Leeann", "Leesa", "Leia", "Leigh"+    , "Leighton", "Leila", "Leilani", "Leisa", "Leisha", "Leitha", "Lela"+    , "Lelah", "Lelar", "Lelia", "Lella", "Lemma", "Lempi", "Lena", "Lenna"+    , "Lennie", "Lenora", "Lenore", "Leola", "Leoma", "Leona", "Leone"+    , "Leonia", "Leonie", "Leonor", "Leonora", "Leonore", "Leontine", "Leora"+    , "Leota", "Lera", "Lesa", "Lesia", "Leslee", "Lesley", "Lesli", "Leslie"+    , "Lesly", "Lessie", "Lesta", "Leta", "Letha", "Lethia", "Leticia"+    , "Letitia", "Letta", "Lettie", "Letty", "Leva", "Levina", "Lexi"+    , "Lexie", "Lexis", "Lexus", "Leyla", "Lia", "Liana", "Liane", "Libbie"+    , "Libby", "Liberty", "Lida", "Liddie", "Lidia", "Lidie", "Lila", "Lilah"+    , "Lilia", "Lilian", "Liliana", "Lilianna", "Lilie", "Lilla", "Liller"+    , "Lillia", "Lillian", "Lilliana", "Lillianna", "Lillie", "Lillis"+    , "Lilly", "Lily", "Lilyan", "Lilyana", "Lilyanna", "Lina", "Linda"+    , "Lindsay", "Lindsey", "Lindy", "Linette", "Linna", "Linnea", "Linnie"+    , "Linsey", "Lisa", "Lisbeth", "Lise", "Lisette", "Lisha", "Lissa"+    , "Lissette", "Lissie", "Lita", "Litha", "Littie", "Litzy", "Livia"+    , "Liz", "Liza", "Lizabeth", "Lizbeth", "Lizeth", "Lizette", "Lizzie"+    , "Lockie", "Loda", "Logan", "Lois", "Lola", "Lolita", "Lolla", "Lollie"+    , "Loma", "Lona", "London", "Londyn", "Loni", "Lonie", "Lonna", "Lonnie"+    , "Lora", "Loraine", "Lorayne", "Lorean", "Loree", "Loreen", "Lorelai"+    , "Lorelei", "Loren", "Lorena", "Lorene", "Lorenza", "Loretta", "Loretto"+    , "Lori", "Loria", "Loriann", "Lorie", "Lorinda", "Lorine", "Loris"+    , "Lorna", "Lorraine", "Lorrayne", "Lorri", "Lorrie", "Lossie", "Lota"+    , "Lotta", "Lottie", "Lou", "Louann", "Louanna", "Louella", "Louetta"+    , "Louie", "Louisa", "Louise", "Louisiana", "Loula", "Lourdes"+    , "Louvenia", "Love", "Lovey", "Lovie", "Lovina", "Lovisa", "Loyce", "Lu"+    , "Luana", "Luann", "Luanne", "Luberta", "Lucero", "Lucetta", "Lucia"+    , "Luciana", "Lucie", "Lucile", "Lucille", "Lucina", "Lucinda", "Lucindy"+    , "Lucretia", "Lucy", "Luda", "Ludie", "Lue", "Luella", "Luetta"+    , "Lugenia", "Luisa", "Lula", "Lulah", "Lular", "Lulie", "Lulla", "Lulu"+    , "Luna", "Lupe", "Lura", "Lurana", "Lurena", "Lurline", "Lutie"+    , "Luvenia", "Luverne", "Luvinia", "Luz", "Lyda", "Lydia", "Lyla"+    , "Lylah", "Lyn", "Lynda", "Lyndia", "Lyndsay", "Lyndsey", "Lynette"+    , "Lynn", "Lynne", "Lynnette", "Lynsey", "Lyric", "Mabel", "Mabell"+    , "Mabelle", "Mable", "Macel", "Macey", "Machelle", "Maci", "Macie"+    , "Mackenzie", "Macy", "Madaline", "Madalyn", "Madalynn", "Maddison"+    , "Madeleine", "Madelene", "Madeline", "Madelyn", "Madelynn", "Madge"+    , "Madie", "Madilyn", "Madilynn", "Madisen", "Madison", "Madisyn"+    , "Madlyn", "Madonna", "Madora", "Madyson", "Mae", "Maebell", "Maebelle"+    , "Maegan", "Maeve", "Mafalda", "Magan", "Magdalen", "Magdalena"+    , "Magdalene", "Magen", "Maggie", "Magnolia", "Mahala", "Mahalia"+    , "Mahalie", "Mai", "Maia", "Maida", "Maira", "Maiya", "Makaila"+    , "Makala", "Makayla", "Makena", "Makenna", "Makenzie", "Malaya"+    , "Maleah", "Malia", "Maliah", "Malinda", "Malissa", "Malissie"+    , "Maliyah", "Mallie", "Mallorie", "Mallory", "Malorie", "Malvina"+    , "Mame", "Mamie", "Mammie", "Manda", "Mandi", "Mandie", "Mandy"+    , "Manerva", "Manervia", "Manie", "Manila", "Manilla", "Mannie"+    , "Manuela", "Manuelita", "Mara", "Maralyn", "Maranda", "Marcela"+    , "Marcelina", "Marceline", "Marcella", "Marcelle", "Marci", "Marcia"+    , "Marcie", "Marcy", "Mardell", "Mareli", "Marely", "Maren", "Margaret"+    , "Margarete", "Margaretha", "Margarett", "Margaretta", "Margarette"+    , "Margarita", "Margarite", "Marge", "Margene", "Margeret", "Margery"+    , "Marget", "Margie", "Margo", "Margot", "Margret", "Margrett"+    , "Margretta", "Marguerite", "Margueritte", "Margurite", "Margy", "Mari"+    , "Maria", "Mariah", "Mariam", "Marian", "Mariana", "Marianita"+    , "Mariann", "Marianna", "Marianne", "Maribel", "Maribeth", "Maricela"+    , "Marie", "Mariel", "Mariela", "Marietta", "Marilee", "Marilla"+    , "Marilou", "Marilyn", "Marilynn", "Marin", "Marina", "Marinda"+    , "Marion", "Marisa", "Marisela", "Marisol", "Marissa", "Marita"+    , "Maritza", "Mariyah", "Marjorie", "Marjory", "Markita", "Marla"+    , "Marlana", "Marlee", "Marleen", "Marleigh", "Marlen", "Marlena"+    , "Marlene", "Marley", "Marlie", "Marlo", "Marlyn", "Marlys", "Marni"+    , "Marnie", "Marnita", "Marolyn", "Marquita", "Marry", "Marsha", "Marta"+    , "Martha", "Marti", "Martika", "Martina", "Martine", "Marty", "Marva"+    , "Marvel", "Mary", "Maryam", "Maryann", "Maryanne", "Marybelle"+    , "Marybeth", "Maryellen", "Maryjane", "Maryjo", "Marylee", "Marylin"+    , "Marylou", "Marylouise", "Marylyn", "Masako", "Mathilda", "Mathilde"+    , "Matie", "Matilda", "Matilde", "Mattie", "Mattye", "Maud", "Maude"+    , "Maudie", "Maura", "Maureen", "Maurine", "Mavis", "Maxie", "Maxine"+    , "May", "Maya", "Maybell", "Maybelle", "Maye", "Mayme", "Maymie"+    , "Mayra", "Mazie", "Mckayla", "Mckenna", "Mckenzie", "Mckinley"+    , "Meadow", "Meagan", "Meaghan", "Mechelle", "Meda", "Media", "Medora"+    , "Meg", "Megan", "Meggan", "Meghan", "Meghann", "Melanie", "Melany"+    , "Melba", "Melina", "Melinda", "Melisa", "Melissa", "Melissia", "Mell"+    , "Mellie", "Mellisa", "Mellissa", "Melodee", "Melodie", "Melody"+    , "Melonie", "Melony", "Melva", "Melvina", "Mena", "Mendy", "Mercedes"+    , "Mercy", "Meredith", "Merilyn", "Merle", "Merlene", "Merna", "Merri"+    , "Merrie", "Merrilee", "Merrily", "Merry", "Mertie", "Meryl", "Meta"+    , "Metha", "Metta", "Mettie", "Mia", "Miah", "Micaela", "Micah"+    , "Micayla", "Michaela", "Michaele", "Michal", "Michele", "Michelina"+    , "Michell", "Michelle", "Mickey", "Mickie", "Miesha", "Migdalia"+    , "Mignon", "Mikaela", "Mikaila", "Mikala", "Mikalah", "Mikayla", "Mila"+    , "Milagros", "Milan", "Milda", "Mildred", "Miley", "Milissa"+    , "Millicent", "Millie", "Milly", "Mima", "Mimi", "Mina", "Minda"+    , "Mindi", "Mindy", "Minerva", "Minervia", "Minna", "Minnie", "Minta"+    , "Mintie", "Mira", "Miracle", "Miranda", "Mireya", "Miriah", "Miriam"+    , "Mirna", "Mirtie", "Missie", "Missouri", "Missy", "Misti", "Mistie"+    , "Misty", "Mittie", "Mitzi", "Miya", "Modena", "Moesha", "Moira"+    , "Mollie", "Molly", "Mona", "Monica", "Monika", "Monique", "Monna"+    , "Monnie", "Monserrat", "Montana", "Montie", "Mora", "Morgan", "Moriah"+    , "Mossie", "Mozell", "Mozella", "Mozelle", "Muriel", "Murl", "Mya"+    , "Myah", "Myla", "Mylee", "Mylie", "Myra", "Myranda", "Myrl", "Myrle"+    , "Myrna", "Myrta", "Myrtice", "Myrtie", "Myrtis", "Myrtle", "Nada"+    , "Nadia", "Nadine", "Naima", "Nakia", "Nakisha", "Nakita", "Nallely"+    , "Nan", "Nana", "Nanci", "Nancie", "Nancy", "Nanette", "Nanie", "Nanna"+    , "Nannette", "Nannie", "Naoma", "Naomi", "Narcissus", "Natalee"+    , "Natalia", "Natalie", "Nataly", "Natalya", "Natasha", "Nathalia"+    , "Nathalie", "Nathaly", "Natosha", "Nautica", "Nayeli", "Nayely"+    , "Nealie", "Nealy", "Nedra", "Neha", "Nelda", "Nelia", "Nelie", "Nell"+    , "Nella", "Nelle", "Nellie", "Nelly", "Nena", "Neola", "Neoma", "Neppie"+    , "Nereida", "Neta", "Netta", "Nettie", "Neva", "Nevada", "Nevaeh"+    , "Neveah", "Nia", "Nichelle", "Nichol", "Nichole", "Nicki", "Nicola"+    , "Nicole", "Nicolette", "Nicolle", "Niki", "Nikia", "Nikita", "Nikki"+    , "Nikole", "Nila", "Nilda", "Nina", "Ninnie", "Nira", "Nita", "Nobie"+    , "Noel", "Noelia", "Noelle", "Noemi", "Noemie", "Nohely", "Nola"+    , "Nolia", "Nolie", "Noma", "Nona", "Nonie", "Nora", "Norah", "Noreen"+    , "Norene", "Noreta", "Noretta", "Norine", "Norita", "Norma", "Nova"+    , "Novella", "Nya", "Nyah", "Nyasia", "Nyla", "Nylah", "Nyree", "Ocie"+    , "Octa", "Octavia", "Octavie", "Oda", "Odalis", "Odalys", "Odelia"+    , "Odell", "Odessa", "Odette", "Odie", "Odile", "Ofelia", "Ola", "Olar"+    , "Olena", "Olene", "Oleta", "Olevia", "Olga", "Olie", "Olinda", "Oline"+    , "Oliva", "Olive", "Olivia", "Olivine", "Ollie", "Olympia", "Oma"+    , "Omie", "Ona", "Oneida", "Oneta", "Oney", "Onie", "Onnie", "Opal"+    , "Opha", "Ophelia", "Ora", "Orah", "Oral", "Oralia", "Orelia", "Orene"+    , "Orilla", "Orlena", "Orma", "Orpha", "Orra", "Orrie", "Osa", "Osie"+    , "Ossie", "Ota", "Otelia", "Otha", "Ottie", "Ottilia", "Ottilie"+    , "Ouida", "Ova", "Ozell", "Ozella", "Ozie", "Paige", "Pairlee"+    , "Paisley", "Paityn", "Pallie", "Palma", "Paloma", "Pam", "Pamala"+    , "Pamela", "Pamelia", "Pamella", "Pandora", "Pansy", "Paola", "Paralee"+    , "Paris", "Parker", "Parlee", "Parthenia", "Pat", "Patience", "Patrica"+    , "Patrice", "Patricia", "Patsy", "Patti", "Pattie", "Patty", "Paula"+    , "Pauletta", "Paulette", "Paulina", "Pauline", "Payten", "Payton"+    , "Pearl", "Pearla", "Pearle", "Pearlene", "Pearlie", "Pearline"+    , "Pearly", "Peggie", "Peggy", "Penelope", "Penni", "Pennie", "Penny"+    , "Pepper", "Perla", "Permelia", "Perri", "Petra", "Peyton", "Phebe"+    , "Pheobe", "Phillis", "Philomena", "Philomene", "Phoebe", "Phoenix"+    , "Phylicia", "Phylis", "Phyliss", "Phyllis", "Pink", "Pinkey", "Pinkie"+    , "Piper", "Pluma", "Pollie", "Polly", "Porsche", "Porsha", "Portia"+    , "Precious", "Presley", "Pricilla", "Princess", "Priscila", "Priscilla"+    , "Prudence", "Prudie", "Qiana", "Queen", "Queenie", "Quiana", "Quinn"+    , "Rachael", "Racheal", "Rachel", "Rachelle", "Racquel", "Rae", "Raegan"+    , "Raelyn", "Raelynn", "Rafaela", "Ragna", "Raina", "Ramona", "Randi"+    , "Raquel", "Rashida", "Raven", "Rayna", "Rayne", "Reagan", "Reanna"+    , "Reatha", "Reba", "Rebeca", "Rebecca", "Rebekah", "Reece", "Reese"+    , "Regan", "Regena", "Regenia", "Regina", "Reilly", "Reina", "Rella"+    , "Rena", "Renada", "Renae", "Renata", "Rene", "Renea", "Renee", "Renita"+    , "Rennie", "Ressie", "Reta", "Retha", "Retta", "Rettie", "Reva", "Reyna"+    , "Rhea", "Rheta", "Rhianna", "Rhiannon", "Rhoda", "Rhona", "Rhonda"+    , "Rianna", "Richelle", "Ricki", "Rihanna", "Rikki", "Riley", "Rilla"+    , "Rillie", "Rinda", "Risa", "Rita", "River", "Riya", "Robbie", "Robbin"+    , "Roberta", "Robin", "Robyn", "Rochelle", "Rocio", "Roena", "Rolanda"+    , "Roma", "Romaine", "Romona", "Rona", "Ronda", "Roni", "Ronna", "Ronnie"+    , "Rory", "Rosa", "Rosabelle", "Rosalee", "Rosalia", "Rosalie"+    , "Rosalind", "Rosalinda", "Rosaline", "Rosalyn", "Rosamond", "Rosann"+    , "Rosanna", "Rosanne", "Rosaria", "Rosario", "Rose", "Roseann"+    , "Roseanna", "Roseanne", "Rosella", "Roselyn", "Rosemarie", "Rosemary"+    , "Rosena", "Rosetta", "Rosey", "Rosia", "Rosie", "Rosina", "Rosita"+    , "Roslyn", "Rossie", "Rosy", "Rowan", "Rowena", "Roxana", "Roxane"+    , "Roxann", "Roxanna", "Roxanne", "Roxie", "Roxy", "Rozanne", "Rozella"+    , "Rubi", "Rubie", "Ruby", "Rubye", "Ruie", "Ruth", "Rutha", "Ruthann"+    , "Ruthanne", "Ruthe", "Ruthie", "Ryann", "Rylan", "Rylee", "Ryleigh"+    , "Rylie", "Sabina", "Sable", "Sabra", "Sabrina", "Sada", "Sade", "Sadie"+    , "Sadye", "Sage", "Saige", "Salena", "Salina", "Sallie", "Sally"+    , "Salma", "Salome", "Samantha", "Samara", "Samatha", "Samira", "Samiyah"+    , "Sammie", "Sanaa", "Sanai", "Sandi", "Sandie", "Sandra", "Sandy"+    , "Saniya", "Saniyah", "Sanjuana", "Sanjuanita", "Sannie", "Santa"+    , "Santana", "Santina", "Santos", "Sara", "Sarah", "Sarahi", "Sarai"+    , "Sariah", "Sarina", "Sarita", "Sarrah", "Sasha", "Saundra", "Savana"+    , "Savanah", "Savanna", "Savannah", "Savilla", "Scarlet", "Scarlett"+    , "Sebrina", "Selah", "Selena", "Selene", "Selina", "Selma", "Sena"+    , "Senora", "Serena", "Serenity", "Serina", "Shae", "Shaina", "Shakira"+    , "Shalon", "Shalonda", "Shameka", "Shamika", "Shana", "Shanae", "Shanda"+    , "Shandra", "Shane", "Shaneka", "Shanell", "Shanelle", "Shanequa"+    , "Shani", "Shania", "Shanice", "Shaniece", "Shanika", "Shaniqua"+    , "Shanita", "Shaniya", "Shanna", "Shannan", "Shannen", "Shannon"+    , "Shanon", "Shanta", "Shante", "Shantel", "Shantell", "Shaquana"+    , "Shaquita", "Shara", "Shardae", "Sharday", "Sharde", "Sharee", "Sharen"+    , "Shari", "Sharita", "Sharla", "Sharleen", "Sharlene", "Sharman"+    , "Sharon", "Sharonda", "Sharron", "Sharyl", "Sharyn", "Shasta"+    , "Shatara", "Shauna", "Shaunna", "Shavon", "Shavonne", "Shawanda"+    , "Shawna", "Shawnda", "Shawnee", "Shawnna", "Shawnte", "Shay", "Shayla"+    , "Shaylee", "Shayna", "Shea", "Sheena", "Sheila", "Sheilah", "Shelba"+    , "Shelbi", "Shelbie", "Shelby", "Shelia", "Shelley", "Shelli", "Shellie"+    , "Shelly", "Shelva", "Shelvia", "Shelvie", "Shena", "Shenna", "Sheree"+    , "Sheri", "Sheridan", "Sherie", "Sherilyn", "Sherita", "Sherlyn"+    , "Sheron", "Sherree", "Sherri", "Sherrie", "Sherrill", "Sherron"+    , "Sherry", "Sherryl", "Sheryl", "Sheryll", "Sheyla", "Shianne", "Shiela"+    , "Shiloh", "Shira", "Shirl", "Shirlee", "Shirleen", "Shirlene"+    , "Shirley", "Shirleyann", "Shirlie", "Shona", "Shonda", "Shonna"+    , "Shreya", "Shyann", "Shyanne", "Shyla", "Sibbie", "Sibyl", "Siddie"+    , "Sidney", "Siena", "Sienna", "Sierra", "Signa", "Signe", "Sigrid"+    , "Silvia", "Simona", "Simone", "Sina", "Sinda", "Siobhan", "Sister"+    , "Sky", "Skye", "Skyla", "Skylar", "Skyler", "Sloane", "Socorro"+    , "Sofia", "Soledad", "Somer", "Sommer", "Sondra", "Sonia", "Sonja"+    , "Sonji", "Sonya", "Sophia", "Sophie", "Sophronia", "Spring", "Stacey"+    , "Staci", "Stacia", "Stacie", "Stacy", "Star", "Starla", "Starr"+    , "Stasia", "Stefani", "Stefanie", "Stella", "Stephaine", "Stephani"+    , "Stephania", "Stephanie", "Stephany", "Stephenie", "Stevie", "Stormy"+    , "Sudie", "Sue", "Suellen", "Sula", "Summer", "Sunday", "Sunny"+    , "Sunshine", "Susan", "Susana", "Susann", "Susanna", "Susannah"+    , "Susanne", "Susie", "Sussie", "Suzan", "Suzann", "Suzanna", "Suzanne"+    , "Suzette", "Suzie", "Suzy", "Sybil", "Sybilla", "Syble", "Sydell"+    , "Sydnee", "Sydney", "Sydni", "Sydnie", "Sylva", "Sylvania", "Sylvia"+    , "Symone", "Syreeta", "Tabatha", "Tabetha", "Tabitha", "Tai", "Taina"+    , "Taja", "Takisha", "Talia", "Taliyah", "Tamala", "Tamara", "Tamatha"+    , "Tambra", "Tameka", "Tamekia", "Tamela", "Tamera", "Tami", "Tamia"+    , "Tamica", "Tamie", "Tamika", "Tamiko", "Tamisha", "Tammi", "Tammie"+    , "Tammy", "Tamra", "Tamya", "Tana", "Tanesha", "Tangela", "Tania"+    , "Tanika", "Tanisha", "Taniya", "Taniyah", "Tanja", "Tanya", "Tara"+    , "Tarah", "Taraji", "Tari", "Tarsha", "Taryn", "Tasha", "Tashina"+    , "Tasia", "Tatia", "Tatiana", "Tatianna", "Tatum", "Tatyana", "Tatyanna"+    , "Tawana", "Tawanda", "Tawanna", "Tawny", "Tawnya", "Taya", "Tayla"+    , "Tayler", "Taylor", "Tea", "Teagan", "Teela", "Teena", "Tella"+    , "Tempie", "Tena", "Tenika", "Tenisha", "Tennessee", "Tennie"+    , "Tennille", "Tera", "Teresa", "Terese", "Teressa", "Teri", "Terra"+    , "Terri", "Terrie", "Terry", "Tess", "Tessa", "Tessie", "Texanna"+    , "Texas", "Texie", "Thalia", "Thea", "Theda", "Thekla", "Thelma"+    , "Theodocia", "Theodora", "Theodosia", "Theola", "Theresa", "Therese"+    , "Theresia", "Theta", "Thomasina", "Thora", "Thresa", "Thursa", "Thyra"+    , "Tia", "Tiana", "Tianna", "Tiara", "Tiarra", "Tiera", "Tierra"+    , "Tiesha", "Tiffani", "Tiffanie", "Tiffany", "Tilda", "Tilla", "Tillie"+    , "Tina", "Tiney", "Tinie", "Tinnie", "Tiny", "Tisa", "Tisha", "Tishie"+    , "Tobi", "Toby", "Toccara", "Tomasa", "Tomeka", "Tomika", "Tommie"+    , "Tonda", "Toni", "Tonia", "Tonja", "Tonya", "Tori", "Torie", "Torrie"+    , "Tory", "Tosha", "Toshiko", "Towanda", "Toya", "Tracee", "Tracey"+    , "Traci", "Tracie", "Tracy", "Treasure", "Treena", "Trena", "Tresa"+    , "Tressa", "Tressie", "Treva", "Tricia", "Trilby", "Trina", "Trinidad"+    , "Trinity", "Trish", "Trisha", "Trista", "Tristan", "Tristen", "Trudi"+    , "Trudie", "Trudy", "Trula", "Tula", "Twila", "Twyla", "Tyesha", "Tyra"+    , "Ula", "Una", "Unique", "Unknown", "Ura", "Ursula", "Vada", "Val"+    , "Valarie", "Valencia", "Valentina", "Valentine", "Valeria", "Valerie"+    , "Valery", "Valinda", "Vallie", "Valorie", "Vanesa", "Vanessa", "Vannie"+    , "Vara", "Vashti", "Vassie", "Veda", "Vela", "Velda", "Velia", "Vella"+    , "Velma", "Velva", "Velvet", "Vena", "Venessa", "Venice", "Venie"+    , "Venita", "Vennie", "Venus", "Veola", "Vera", "Verda", "Verdell"+    , "Verdie", "Verena", "Vergie", "Verla", "Verlene", "Verlie", "Verna"+    , "Verne", "Vernell", "Vernelle", "Vernetta", "Vernia", "Vernice"+    , "Vernie", "Vernita", "Verona", "Veronica", "Versa", "Versie", "Vertie"+    , "Vessie", "Vesta", "Veta", "Veva", "Vicie", "Vickey", "Vicki", "Vickie"+    , "Vicky", "Victoria", "Victorine", "Victory", "Vicy", "Vida", "Vikki"+    , "Villa", "Vilma", "Vina", "Vincenza", "Viney", "Vinie", "Vinnie"+    , "Viola", "Violet", "Violeta", "Violetta", "Violette", "Vira", "Virdie"+    , "Virgia", "Virgie", "Virginia", "Viridiana", "Vita", "Viva", "Vivian"+    , "Viviana", "Vivien", "Vivienne", "Vlasta", "Vonda", "Vonetta", "Vonnie"+    , "Wanda", "Waneta", "Wanita", "Wava", "Wende", "Wendi", "Wendy"+    , "Whitley", "Whitney", "Wilda", "Wilhelmina", "Wilhelmine", "Willa"+    , "Willene", "Willia", "Willie", "Williemae", "Willodean", "Willow"+    , "Wilma", "Windy", "Winifred", "Winnie", "Winnifred", "Winona", "Winter"+    , "Wynona", "Xena", "Ximena", "Xiomara", "Yadira", "Yahaira", "Yajaira"+    , "Yamilet", "Yamilex", "Yareli", "Yaretzi", "Yaritza", "Yasmeen"+    , "Yasmin", "Yasmine", "Yazmin", "Yesenia", "Yessenia", "Yetta"+    , "Yolanda", "Yolonda", "Yoselin", "Yoshiko", "Yuliana", "Yulisa"+    , "Yulissa", "Yuridia", "Yvette", "Yvonne", "Zada", "Zadie", "Zaida"+    , "Zana", "Zandra", "Zaniyah", "Zara", "Zaria", "Zariah", "Zela", "Zelda"+    , "Zelia", "Zella", "Zelma", "Zelpha", "Zena", "Zenobia", "Zeta", "Zetta"+    , "Zettie", "Zhane", "Zillah", "Zilpah", "Zilpha", "Zina", "Zion", "Zita"+    , "Zoa", "Zoe", "Zoey", "Zoie", "Zola", "Zona", "Zora", "Zula"+    ]+++maleFirstName :: FGen SingleWord+maleFirstName = elements $ map SingleWord+    [ "Aaden", "Aarav", "Aaron", "Ab", "Abb", "Abbott", "Abdiel", "Abdul"+    , "Abdullah", "Abe", "Abel", "Abelardo", "Abie", "Abner", "Abraham"+    , "Abram", "Ace", "Acey", "Acie", "Acy", "Adalberto", "Adam", "Adams"+    , "Adan", "Add", "Adelard", "Adelbert", "Aden", "Adin", "Aditya", "Adlai"+    , "Admiral", "Adolf", "Adolfo", "Adolph", "Adolphus", "Adonis", "Adrain"+    , "Adrian", "Adriel", "Adrien", "Adron", "Aedan", "Agustin", "Agustus"+    , "Ah", "Ahmad", "Ahmed", "Aidan", "Aiden", "Aidyn", "Aime", "Akeem"+    , "Al", "Alan", "Alanzo", "Albert", "Alberto", "Albertus", "Albin"+    , "Albion", "Alby", "Alcee", "Alcide", "Alden", "Aldo", "Alec", "Aleck"+    , "Alejandro", "Alek", "Alessandro", "Alex", "Alexande", "Alexander"+    , "Alexandre", "Alexandro", "Alexis", "Alexzander", "Alf", "Alferd"+    , "Alfie", "Alfonse", "Alfonso", "Alfonzo", "Alford", "Alfred", "Alfredo"+    , "Alger", "Algernon", "Algie", "Algot", "Ali", "Alijah", "Allan"+    , "Allen", "Allyn", "Almer", "Almon", "Almond", "Almus", "Alois"+    , "Alonso", "Alonza", "Alonzo", "Aloys", "Aloysius", "Alpheus", "Alphons"+    , "Alphonse", "Alphonso", "Alphonsus", "Alston", "Alto", "Alton", "Alva"+    , "Alvah", "Alvan", "Alvaro", "Alver", "Alvia", "Alvie", "Alvin", "Alvis"+    , "Alvy", "Alwin", "Amado", "Amare", "Amari", "Amarion", "Amasa"+    , "Ambers", "Ambrose", "Americo", "Amerigo", "Amil", "Amin", "Amir"+    , "Amit", "Ammon", "Amon", "Amos", "Ananias", "Anastacio", "Anatole"+    , "Ancel", "Ancil", "Anders", "Anderson", "Andon", "Andra", "Andrae"+    , "Andre", "Andreas", "Andres", "Andrew", "Andy", "Anfernee", "Angel"+    , "Angelo", "Angus", "Anibal", "Ansel", "Anson", "Anthoney", "Anthony"+    , "Antione", "Antoine", "Anton", "Antone", "Antonio", "Antony", "Antwain"+    , "Antwan", "Antwon", "Anwar", "Arba", "Arbie", "Arch", "Archer"+    , "Archibald", "Archie", "Ardell", "Arden", "Ari", "Aric", "Arjun"+    , "Arlan", "Arland", "Arlen", "Arley", "Arlie", "Arlin", "Arlington"+    , "Arlis", "Arlo", "Arlyn", "Arman", "Armand", "Armando", "Armani"+    , "Armin", "Armond", "Armstead", "Arnav", "Arne", "Arnett", "Arnie"+    , "Arno", "Arnold", "Arnoldo", "Arnulfo", "Aron", "Arron", "Arsenio"+    , "Art", "Arther", "Arthor", "Arthur", "Artie", "Artis", "Arturo"+    , "Arvel", "Arvid", "Arvil", "Arvin", "Arvo", "Aryan", "Asa", "Asberry"+    , "Asbury", "Ashby", "Asher", "Ashton", "Atha", "Atlas", "Atticus"+    , "Attilio", "Aubra", "Aubrey", "Audie", "Audley", "Audy", "August"+    , "Auguste", "Augustin", "Augustine", "Augustus", "Aurelio", "Aurthur"+    , "Austen", "Austin", "Auston", "Austyn", "Auther", "Author", "Authur"+    , "Autry", "Avery", "Avon", "Axel", "Ayaan", "Aydan", "Ayden", "Aydin"+    , "Babe", "Babyboy", "Bailey", "Baker", "Baldwin", "Ballard", "Banks"+    , "Barnard", "Barnett", "Barney", "Barnie", "Baron", "Barrett", "Barrie"+    , "Barron", "Barry", "Bart", "Bartholomew", "Bartley", "Barton", "Bascom"+    , "Basil", "Baxter", "Bayard", "Beau", "Beckett", "Beckham", "Bedford"+    , "Beecher", "Bell", "Belton", "Ben", "Benard", "Benedict", "Benito"+    , "Benjaman", "Benjamen", "Benjamin", "Benjamine", "Benji", "Benjiman"+    , "Benjman", "Bennett", "Bennie", "Benny", "Benson", "Bentley", "Benton"+    , "Berkley", "Berlin", "Bernard", "Bernardo", "Bernhard", "Bernie"+    , "Berry", "Bert", "Bertie", "Berton", "Bertram", "Bertrand", "Beryl"+    , "Bethel", "Bilal", "Bill", "Billie", "Billy", "Bird", "Birt", "Bishop"+    , "Bjorn", "Blain", "Blaine", "Blair", "Blaise", "Blake", "Blanchard"+    , "Blane", "Blas", "Blaze", "Bliss", "Bluford", "Bo", "Bob", "Bobbie"+    , "Bobby", "Bode", "Bolden", "Booker", "Boone", "Boris", "Bose", "Boss"+    , "Boston", "Bowman", "Boyce", "Boyd", "Boysie", "Brad", "Braden"+    , "Bradford", "Bradley", "Bradly", "Brady", "Bradyn", "Braeden"+    , "Braedon", "Braiden", "Brain", "Branch", "Brandan", "Branden"+    , "Brandin", "Brandon", "Brandt", "Brandy", "Brandyn", "Brannon"+    , "Branson", "Brant", "Brantley", "Braulio", "Braxton", "Brayan"+    , "Brayden", "Braydon", "Braylen", "Braylon", "Brendan", "Brenden"+    , "Brendon", "Brennan", "Brennen", "Brennon", "Brent", "Brenton", "Bret"+    , "Brett", "Brian", "Brice", "Bridger", "Brien", "Brion", "Britt"+    , "Brittany", "Britton", "Brock", "Broderick", "Brodie", "Brody"+    , "Brogan", "Bronson", "Brook", "Brooks", "Brown", "Bruce", "Bruno"+    , "Bryan", "Bryant", "Bryce", "Brycen", "Bryon", "Bryson", "Bryton"+    , "Buck", "Bud", "Budd", "Buddie", "Buddy", "Buel", "Buell", "Buford"+    , "Bunk", "Burdette", "Buren", "Burgess", "Burk", "Burke", "Burl"+    , "Burleigh", "Burley", "Burnell", "Burnett", "Burney", "Burnice"+    , "Burnie", "Burns", "Burr", "Burrel", "Burrell", "Burt", "Burton"+    , "Bush", "Buster", "Butch", "Butler", "Bynum", "Byrd", "Byron", "Cade"+    , "Caden", "Cael", "Caesar", "Caiden", "Cain", "Cal", "Cale", "Caleb"+    , "Calhoun", "Callie", "Callum", "Calvin", "Cam", "Camden", "Cameron"+    , "Camilo", "Campbell", "Camren", "Camron", "Camryn", "Candido", "Cannon"+    , "Canyon", "Cap", "Captain", "Carey", "Carl", "Carleton", "Carlie"+    , "Carlisle", "Carlo", "Carlos", "Carlton", "Carlyle", "Carmel"+    , "Carmelo", "Carmen", "Carmine", "Carnell", "Carrie", "Carrol"+    , "Carroll", "Carsen", "Carson", "Carter", "Cary", "Cas", "Case", "Casen"+    , "Casey", "Cash", "Casimer", "Casimir", "Casimiro", "Cason", "Casper"+    , "Cass", "Cassidy", "Cassie", "Cassius", "Caswell", "Cato", "Cayden"+    , "Ceasar", "Cecil", "Cedric", "Cedrick", "Celestino", "Cephus", "Cesar"+    , "Ceylon", "Chace", "Chad", "Chadd", "Chadrick", "Chadwick", "Chaim"+    , "Chalmer", "Chalmers", "Champ", "Chance", "Chancey", "Chancy"+    , "Chandler", "Channing", "Charle", "Charles", "Charley", "Charlie"+    , "Charls", "Charlton", "Charly", "Chas", "Chase", "Chauncey", "Chauncy"+    , "Chaz", "Che", "Chesley", "Chester", "Chet", "Cheyenne", "Chin", "Chip"+    , "Chris", "Christ", "Christian", "Christina", "Christion", "Christop"+    , "Christoper", "Christophe", "Christopher", "Chuck", "Cicero", "Clabe"+    , "Claiborne", "Clair", "Clarance", "Clare", "Clarence", "Clark"+    , "Clarke", "Clarnce", "Claud", "Claude", "Claudie", "Claudio"+    , "Claudius", "Claus", "Clay", "Clayton", "Clearence", "Cleave", "Clell"+    , "Clem", "Clemence", "Clemens", "Clement", "Clemente", "Clemmie"+    , "Clemon", "Cleo", "Cleon", "Cletus", "Cleve", "Cleveland", "Clide"+    , "Cliff", "Clifford", "Clifton", "Clint", "Clinton", "Clive", "Clovis"+    , "Cloyd", "Clyde", "Coby", "Codey", "Codi", "Codie", "Cody", "Coen"+    , "Cohen", "Colbert", "Colby", "Cole", "Coleman", "Coleton", "Coley"+    , "Colie", "Colin", "Collie", "Collier", "Collin", "Collins", "Collis"+    , "Colon", "Colonel", "Colt", "Colten", "Colter", "Colton", "Columbus"+    , "Colvin", "Commodore", "Con", "Conard", "Conley", "Conner", "Connie"+    , "Connor", "Conor", "Conrad", "Constantine", "Conway", "Coolidge"+    , "Cooper", "Corbett", "Corbin", "Cordaro", "Cordell", "Cordero", "Corey"+    , "Cornel", "Cornelious", "Cornelius", "Cornell", "Corry", "Cortez"+    , "Cortney", "Corwin", "Cory", "Cosmo", "Coty", "Council", "Courtland"+    , "Courtney", "Coy", "Craig", "Crawford", "Creed", "Cris", "Cristian"+    , "Cristobal", "Cristofer", "Cristopher", "Crockett", "Cruz", "Cullen"+    , "Curley", "Curt", "Curtis", "Curtiss", "Cyril", "Cyrus", "Dabney"+    , "Dakoda", "Dakota", "Dakotah", "Dale", "Dallas", "Dallin", "Dalton"+    , "Dalvin", "Damarcus", "Damari", "Damarion", "Dameon", "Damian"+    , "Damien", "Damion", "Damon", "Damond", "Dan", "Dana", "Dandre", "Dane"+    , "Dangelo", "Danial", "Daniel", "Dann", "Dannie", "Danniel", "Danny"+    , "Dante", "Daquan", "Darby", "Darcy", "Darell", "Daren", "Darian"+    , "Darien", "Darin", "Dario", "Darion", "Darius", "Darl", "Darnell"+    , "Darold", "Daron", "Darrel", "Darrell", "Darren", "Darrian", "Darrick"+    , "Darrien", "Darrin", "Darrion", "Darrius", "Darron", "Darry", "Darryl"+    , "Darryle", "Darryll", "Darryn", "Darvin", "Darwin", "Darwyn", "Daryl"+    , "Daryle", "Daryn", "Dashawn", "Daulton", "Daunte", "Davante", "Dave"+    , "Davey", "Davian", "David", "Davie", "Davin", "Davion", "Davis"+    , "Davon", "Davonta", "Davonte", "Davy", "Dawson", "Dax", "Daxton"+    , "Dayne", "Dayton", "Deacon", "Dean", "Deandre", "Deane", "Deangelo"+    , "Deante", "Declan", "Dedric", "Dedrick", "Deegan", "Deforest", "Deion"+    , "Dejon", "Dejuan", "Del", "Delano", "Delbert", "Dell", "Della", "Delma"+    , "Delmar", "Delmas", "Delmer", "Delmus", "Delos", "Delphin", "Delton"+    , "Delvin", "Delwin", "Demarco", "Demarcus", "Demario", "Demarion"+    , "Demetri", "Demetric", "Demetrios", "Demetrius", "Demian", "Demond"+    , "Demonte", "Dempsey", "Denis", "Dennie", "Dennis", "Denny", "Denton"+    , "Denver", "Denzel", "Denzell", "Denzil", "Deon", "Deondre", "Deonta"+    , "Deontae", "Deonte", "Dequan", "Derald", "Dereck", "Derek", "Dereon"+    , "Deric", "Derick", "Derik", "Derl", "Deron", "Derrek", "Derrell"+    , "Derrick", "Derwin", "Deryl", "Desean", "Deshaun", "Deshawn", "Desi"+    , "Desmond", "Dessie", "Destin", "Destry", "Devan", "Devante", "Devaughn"+    , "Deven", "Devin", "Devon", "Devonta", "Devontae", "Devonte", "Devyn"+    , "Deward", "Dewayne", "Dewey", "Dewitt", "Dexter", "Diallo", "Diamond"+    , "Diane", "Dickie", "Diego", "Dijon", "Dilan", "Dillan", "Dillard"+    , "Dillion", "Dillon", "Dimitri", "Dimitrios", "Dink", "Dino", "Dion"+    , "Dionicio", "Dionte", "Dirk", "Dixon", "Doc", "Dock", "Doctor", "Doll"+    , "Dolph", "Dolphus", "Domenic", "Domenick", "Domenico", "Domingo"+    , "Dominic", "Dominick", "Dominik", "Don", "Donaciano", "Donal", "Donald"+    , "Donat", "Donato", "Donavan", "Donavon", "Dondre", "Donell", "Donn"+    , "Donnell", "Donnie", "Donny", "Donovan", "Donta", "Dontae", "Donte"+    , "Dora", "Dorian", "Dorman", "Dorr", "Dorris", "Dorsey", "Doss", "Doug"+    , "Douglas", "Douglass", "Dow", "Doyle", "Dozier", "Drake", "Draven"+    , "Drew", "Drury", "Duane", "Duard", "Dudley", "Duff", "Duke", "Duncan"+    , "Durell", "Durrell", "Durward", "Durwood", "Dustan", "Dustin", "Dusty"+    , "Dustyn", "Duwayne", "Dwain", "Dwaine", "Dwane", "Dwayne", "Dwight"+    , "Dwyane", "Dylan", "Dyllan", "Dylon", "Ean", "Earl", "Earle", "Earley"+    , "Earlie", "Early", "Earnest", "Easton", "Ebb", "Ebbie", "Eben"+    , "Ebenezer", "Eber", "Ebert", "Ed", "Edd", "Eddie", "Eddy", "Eden"+    , "Edgar", "Edgardo", "Edie", "Edison", "Edmon", "Edmond", "Edmund"+    , "Edsel", "Edson", "Eduardo", "Edw", "Edward", "Edwardo", "Edwin"+    , "Effie", "Efrain", "Efrem", "Efren", "Egbert", "Einar", "Eino", "Elam"+    , "Elbert", "Elbridge", "Elby", "Elden", "Elder", "Eldon", "Eldred"+    , "Eldridge", "Elex", "Elgie", "Elgin", "Eli", "Elian", "Elias", "Elick"+    , "Elie", "Eliezer", "Eliga", "Eligah", "Elige", "Elihu", "Elijah"+    , "Eliot", "Eliseo", "Elisha", "Elizah", "Ell", "Ellery", "Elliot"+    , "Elliott", "Ellis", "Ellison", "Ellsworth", "Ellwood", "Elmer", "Elmo"+    , "Elmore", "Elon", "Elonzo", "Eloy", "Elroy", "Elsworth", "Elton"+    , "Elvin", "Elvis", "Elwin", "Elwood", "Elwyn", "Ely", "Elza", "Elzie"+    , "Elzy", "Emanuel", "Emerson", "Emery", "Emett", "Emil", "Emile"+    , "Emiliano", "Emilio", "Emit", "Emma", "Emmanuel", "Emmet", "Emmett"+    , "Emmit", "Emmitt", "Emmons", "Emory", "Emry", "Encarnacion", "Ennis"+    , "Enoch", "Enos", "Enrico", "Enrique", "Enzo", "Ephraim", "Ephram"+    , "Ephriam", "Epifanio", "Erasmo", "Erasmus", "Erastus", "Erby", "Eric"+    , "Erich", "Erick", "Erie", "Erik", "Erin", "Erland", "Erle", "Erling"+    , "Ernest", "Ernesto", "Ernie", "Ernst", "Errol", "Ervin", "Erving"+    , "Erwin", "Esau", "Esco", "Esequiel", "Esker", "Esley", "Essex"+    , "Esteban", "Estel", "Estes", "Estevan", "Estill", "Eston", "Ethan"+    , "Ethelbert", "Ethen", "Eugene", "Eugenio", "Eusebio", "Eustace", "Evan"+    , "Evander", "Evans", "Evelyn", "Everet", "Everett", "Everette", "Evert"+    , "Evertt", "Ewald", "Ewart", "Ewell", "Ewin", "Ewing", "Ezekiel"+    , "Ezell", "Ezequiel", "Ezra", "Ezzard", "Fabian", "Faron", "Farrell"+    , "Farris", "Fate", "Faustino", "Fayette", "Fed", "Federico", "Felipe"+    , "Felix", "Felton", "Fenton", "Ferd", "Ferdinand", "Ferman", "Fernand"+    , "Fernando", "Ferrell", "Ferris", "Festus", "Fidel", "Fidencio"+    , "Fielding", "Finis", "Finley", "Finn", "Finnegan", "Firman", "Fisher"+    , "Fitzgerald", "Fitzhugh", "Fleet", "Flem", "Fleming", "Fletcher"+    , "Flint", "Florencio", "Florentino", "Florian", "Floy", "Floyd", "Foch"+    , "Ford", "Forest", "Forrest", "Foster", "Fount", "Foy", "Frances"+    , "Francesco", "Francis", "Francisco", "Franco", "Frank", "Frankie"+    , "Franklin", "Franklyn", "Franz", "Frazier", "Fred", "Freddie", "Freddy"+    , "Frederic", "Frederick", "Fredie", "Fredric", "Fredrick", "Fredy"+    , "Freeman", "Fremont", "French", "Friend", "Fritz", "Fuller", "Fulton"+    , "Furman", "Gabe", "Gabriel", "Gael", "Gaetano", "Gage", "Gaige", "Gail"+    , "Gaines", "Gaither", "Gale", "Galen", "Gannon", "Gardner", "Garett"+    , "Garey", "Garfield", "Garland", "Garner", "Garnet", "Garnett", "Garold"+    , "Garret", "Garrett", "Garrick", "Garrison", "Garry", "Garth", "Garvin"+    , "Gary", "Gasper", "Gaston", "Gauge", "Gaven", "Gavin", "Gavyn", "Gay"+    , "Gayle", "Gaylen", "Gaylon", "Gaylord", "Gearld", "Geary", "Gee"+    , "Genaro", "Gene", "General", "Genie", "Gennaro", "Geno", "Geo", "Geoff"+    , "Geoffrey", "George", "Georgie", "Geovanni", "Gerald", "Geraldo"+    , "Gerard", "Gerardo", "Gerhard", "Gerhardt", "Germaine", "German"+    , "Gerold", "Gerrit", "Gerry", "Giancarlo", "Gianni", "Gibson", "Gideon"+    , "Gifford", "Gil", "Gilbert", "Gilberto", "Giles", "Gilford", "Gilman"+    , "Gilmer", "Gilmore", "Gino", "Giovani", "Giovanni", "Giovanny"+    , "Giuseppe", "Gladstone", "Glen", "Glendon", "Glenn", "Glenwood"+    , "Glover", "Glynn", "Godfrey", "Goebel", "Golden", "Gonzalo", "Gorden"+    , "Gordon", "Gorge", "Gottlieb", "Governor", "Grady", "Grafton", "Graham"+    , "Grant", "Granville", "Graves", "Gray", "Graydon", "Grayling"+    , "Grayson", "Green", "Greene", "Greg", "Gregg", "Greggory", "Gregorio"+    , "Gregory", "Greyson", "Griffin", "Griffith", "Grove", "Grover", "Guido"+    , "Guilford", "Guillermo", "Gunnar", "Gunner", "Gurney", "Gus", "Guss"+    , "Gussie", "Gust", "Gustaf", "Gustav", "Gustave", "Gustavo", "Gustavus"+    , "Guthrie", "Guy", "Haden", "Hadley", "Haiden", "Hakeem", "Hakim", "Hal"+    , "Halbert", "Hale", "Hall", "Halley", "Hallie", "Halsey", "Ham"+    , "Hamilton", "Hamp", "Hampton", "Hamza", "Handy", "Hank", "Hans"+    , "Hansel", "Hansford", "Hanson", "Harden", "Hardie", "Hardin", "Harding"+    , "Hardy", "Harl", "Harlan", "Harland", "Harlen", "Harley", "Harlie"+    , "Harlon", "Harlow", "Harm", "Harman", "Harmon", "Harold", "Harper"+    , "Harrell", "Harrie", "Harris", "Harrison", "Harrold", "Harry", "Hart"+    , "Hartley", "Hartwell", "Harve", "Harvey", "Harvie", "Harvy", "Hasan"+    , "Haskell", "Hassan", "Hattie", "Haven", "Hayden", "Hayes", "Hays"+    , "Hayward", "Haywood", "Hazen", "Heath", "Heber", "Hebert", "Hector"+    , "Helmer", "Hence", "Henderson", "Henery", "Henri", "Henry", "Herb"+    , "Herbert", "Heriberto", "Herman", "Hermann", "Hermon", "Hernan"+    , "Herschel", "Hershel", "Hershell", "Hervey", "Heyward", "Hezekiah"+    , "Hezzie", "Hideo", "Hilario", "Hilary", "Hilbert", "Hill", "Hillard"+    , "Hillary", "Hillery", "Hilliard", "Hilmer", "Hilton", "Hiram"+    , "Hiroshi", "Hjalmar", "Hjalmer", "Hobart", "Hobert", "Hobson", "Hoke"+    , "Holden", "Holland", "Hollie", "Hollis", "Holmes", "Homer", "Hoover"+    , "Hope", "Horace", "Horacio", "Horatio", "Horton", "Hosea", "Hosie"+    , "Hosteen", "Houston", "Howard", "Howell", "Hoy", "Hoyt", "Hubbard"+    , "Hubert", "Hudson", "Huey", "Hugh", "Hughes", "Hughey", "Hughie"+    , "Hugo", "Humberto", "Humphrey", "Hung", "Hunt", "Hunter", "Hurbert"+    , "Hurley", "Huston", "Huy", "Hyman", "Hymen", "Hyrum", "Ian", "Ibrahim"+    , "Ida", "Ignacio", "Ignatius", "Ignatz", "Ike", "Illya", "Imanol"+    , "Immanuel", "Infant", "Ingram", "Ira", "Irl", "Irven", "Irvin"+    , "Irvine", "Irving", "Irwin", "Isaac", "Isaak", "Isadore", "Isai"+    , "Isaiah", "Isaias", "Isam", "Ishaan", "Isham", "Ishmael", "Isiah"+    , "Isidor", "Isidore", "Isidro", "Ismael", "Isom", "Israel", "Isreal"+    , "Issac", "Iva", "Ivan", "Iver", "Iverson", "Ivey", "Ivor", "Ivory"+    , "Ivy", "Izaiah", "Izayah", "Jabari", "Jabbar", "Jabez", "Jace", "Jack"+    , "Jackson", "Jacky", "Jacob", "Jacoby", "Jacques", "Jacquez", "Jade"+    , "Jaden", "Jadiel", "Jadon", "Jadyn", "Jaeden", "Jagger", "Jaheem"+    , "Jaheim", "Jahiem", "Jahir", "Jaiden", "Jaidyn", "Jaime", "Jaimie"+    , "Jair", "Jairo", "Jajuan", "Jake", "Jakob", "Jakobe", "Jaleel", "Jalen"+    , "Jalon", "Jamaal", "Jamal", "Jamar", "Jamarcus", "Jamari", "Jamarion"+    , "Jame", "Jameel", "Jamel", "James", "Jameson", "Jamey", "Jamie"+    , "Jamil", "Jamin", "Jamir", "Jamison", "Jammie", "Jan", "Jaquan"+    , "Jaquez", "Jarad", "Jared", "Jaren", "Jaret", "Jarett", "Jarod"+    , "Jaron", "Jarrad", "Jarred", "Jarrell", "Jarret", "Jarrett", "Jarrod"+    , "Jarvis", "Jase", "Jasen", "Jasiah", "Jason", "Jasper", "Javen"+    , "Javier", "Javion", "Javon", "Javonte", "Jax", "Jaxen", "Jaxon"+    , "Jaxson", "Jaxton", "Jay", "Jayce", "Jaycob", "Jaydan", "Jayden"+    , "Jaydin", "Jaydon", "Jaylan", "Jaylen", "Jaylin", "Jaylon", "Jayme"+    , "Jaymes", "Jayson", "Jayvion", "Jayvon", "Jean", "Jeb", "Jed"+    , "Jedediah", "Jedidiah", "Jeff", "Jefferey", "Jefferson", "Jeffery"+    , "Jeffie", "Jeffrey", "Jeffry", "Jelani", "Jemal", "Jennings", "Jens"+    , "Jensen", "Jep", "Jeptha", "Jerad", "Jerald", "Jeramiah", "Jeramie"+    , "Jeramy", "Jere", "Jered", "Jerel", "Jereme", "Jeremey", "Jeremiah"+    , "Jeremie", "Jeremy", "Jerimiah", "Jerimy", "Jermain", "Jermaine"+    , "Jermey", "Jerod", "Jerold", "Jerome", "Jeromy", "Jerrad", "Jerrel"+    , "Jerrell", "Jerrod", "Jerrold", "Jerry", "Jess", "Jesse", "Jessee"+    , "Jessie", "Jessy", "Jesus", "Jethro", "Jett", "Jettie", "Jevon"+    , "Jewell", "Jiles", "Jim", "Jimmie", "Jimmy", "Joaquin", "Job", "Jobe"+    , "Joe", "Joel", "Joeseph", "Joesph", "Joey", "Johan", "Johathan", "John"+    , "Johnathan", "Johnathon", "Johney", "Johnie", "Johnnie", "Johnny"+    , "Johnpaul", "Johnson", "Johny", "Jon", "Jonah", "Jonas", "Jonatan"+    , "Jonathan", "Jonathon", "Jones", "Jonnie", "Jordan", "Jorden", "Jordi"+    , "Jordon", "Jordy", "Jordyn", "Jorge", "Jory", "Jose", "Josef"+    , "Joseluis", "Joseph", "Josephus", "Josh", "Joshua", "Joshuah", "Josiah"+    , "Josue", "Jovan", "Jovani", "Jovanni", "Jovanny", "Jovany", "Joy"+    , "Juan", "Judah", "Judd", "Jude", "Judge", "Judson", "Juelz", "Jule"+    , "Jules", "Julian", "Julien", "Julio", "Julious", "Julius", "Juluis"+    , "Junior", "Junious", "Junius", "Justen", "Justice", "Justin", "Juston"+    , "Justus", "Justyn", "Juwan", "Kade", "Kadeem", "Kaden", "Kadin"+    , "Kadyn", "Kaeden", "Kael", "Kahlil", "Kai", "Kaiden", "Kale", "Kaleb"+    , "Kalel", "Kalen", "Kalvin", "Kamari", "Kamden", "Kameron", "Kamren"+    , "Kamron", "Kamryn", "Kane", "Kanye", "Kareem", "Kareen", "Karim"+    , "Karl", "Karson", "Karter", "Kasen", "Kasey", "Kash", "Kason", "Kavon"+    , "Kayden", "Kaye", "Kayson", "Kazuo", "Keagan", "Keandre", "Keanu"+    , "Keaton", "Keegan", "Keenan", "Keenen", "Kegan", "Keifer", "Keion"+    , "Keith", "Kelan", "Kelby", "Kellan", "Kellen", "Kelley", "Kelly"+    , "Kelsey", "Kelton", "Kelvin", "Kem", "Ken", "Kenan", "Kendal"+    , "Kendall", "Kendell", "Kendrick", "Kenji", "Kennard", "Kennedy"+    , "Kenneth", "Kenney", "Kennith", "Kennth", "Kenny", "Kent", "Kenton"+    , "Kenya", "Kenyatta", "Kenyon", "Keon", "Kermit", "Kerry", "Kerwin"+    , "Keshaun", "Keshawn", "Kevan", "Keven", "Kevin", "Kevon", "Keyon"+    , "Keyshawn", "Khalid", "Khalil", "Khari", "Khiry", "Kian", "Kiara"+    , "Kiefer", "Kiel", "Kieran", "Kieth", "Kiley", "Killian", "Kim"+    , "Kimball", "Kimberly", "King", "Kingston", "Kinte", "Kip", "Kipp"+    , "Kirby", "Kirk", "Kirt", "Kit", "Kiyoshi", "Knox", "Knute", "Kobe"+    , "Koby", "Koda", "Kody", "Koen", "Kolby", "Kole", "Kolten", "Kolton"+    , "Konner", "Konnor", "Korbin", "Kordell", "Korey", "Kory", "Kraig"+    , "Kris", "Krish", "Kristen", "Kristian", "Kristin", "Kristofer"+    , "Kristoffer", "Kristopher", "Kunta", "Kurt", "Kurtis", "Kwame", "Kyan"+    , "Kylan", "Kyle", "Kyler", "Kymani", "Kyree", "Kyson", "Lacey", "Lacy"+    , "Ladarius", "Laddie", "Lafayette", "Lafe", "Lamar", "Lamarcus"+    , "Lambert", "Lamont", "Lamonte", "Lance", "Landan", "Landen", "Landin"+    , "Landon", "Landyn", "Lane", "Lannie", "Lanny", "Laquan", "Lark"+    , "Larkin", "Laron", "Larry", "Lars", "Larue", "Lary", "Lashawn"+    , "Latrell", "Laurance", "Laurel", "Laurence", "Lavar", "Lavern"+    , "Laverne", "Lavon", "Lawerence", "Lawrance", "Lawrence", "Lawson"+    , "Lawton", "Lawyer", "Layne", "Layton", "Lazaro", "Le", "Lea", "Leamon"+    , "Leander", "Leandro", "Lee", "Leeroy", "Leif", "Leigh", "Leighton"+    , "Leland", "Lem", "Lemmie", "Lemon", "Lemuel", "Len", "Lena", "Lenard"+    , "Lennie", "Lennon", "Lenny", "Lenon", "Lenord", "Lenwood", "Leo"+    , "Leon", "Leonard", "Leonardo", "Leonce", "Leonel", "Leonidas"+    , "Leopold", "Leopoldo", "Leroy", "Les", "Lesley", "Leslie", "Less"+    , "Lessie", "Lester", "Levar", "Levern", "Levi", "Levie", "Levin"+    , "Levon", "Levy", "Lew", "Lewis", "Lex", "Lexie", "Liam", "Lige"+    , "Lilburn", "Lillard", "Lim", "Lincoln", "Lindbergh", "Lindell"+    , "Linden", "Lindsay", "Lindsey", "Lindy", "Link", "Linn", "Linnie"+    , "Linton", "Linus", "Linwood", "Linzy", "Lionel", "Lisandro", "Lish"+    , "Lisle", "Liston", "Little", "Littleton", "Llewellyn", "Lloyd", "Logan"+    , "Lon", "London", "Lone", "Loney", "Long", "Lonie", "Lonnie", "Lonny"+    , "Lonzo", "Lora", "Loran", "Loren", "Lorenz", "Lorenza", "Lorenzo"+    , "Lorin", "Loring", "Lorne", "Lott", "Lou", "Louie", "Louis", "Love"+    , "Lovell", "Lovett", "Lovie", "Lowell", "Loy", "Loyal", "Loyd", "Luc"+    , "Luca", "Lucas", "Lucian", "Luciano", "Lucien", "Lucio", "Lucious"+    , "Lucius", "Lucky", "Ludwig", "Lue", "Luigi", "Luis", "Luka", "Lukas"+    , "Luke", "Lula", "Lum", "Lupe", "Luster", "Lute", "Luther", "Luverne"+    , "Lydell", "Lyle", "Lyman", "Lyn", "Lyndon", "Lynn", "Lynwood", "Lyric"+    , "Mac", "Macarthur", "Mace", "Maceo", "Mack", "Mackenzie", "Madden"+    , "Maddox", "Maddux", "Madison", "Mae", "Mahlon", "Major", "Makai"+    , "Makhi", "Mal", "Malachi", "Malakai", "Malaki", "Malcolm", "Malcom"+    , "Male", "Malik", "Malvin", "Mamie", "Manford", "Manley", "Manly"+    , "Mannie", "Manning", "Mansfield", "Manson", "Manuel", "Marc", "Marcel"+    , "Marcelino", "Marcell", "Marcello", "Marcellus", "Marcelo", "Marchello"+    , "Marco", "Marcos", "Marcus", "Margarito", "Mariano", "Mario", "Marion"+    , "Marius", "Mark", "Markel", "Markell", "Markus", "Marland", "Marley"+    , "Marlin", "Marlo", "Marlon", "Marlyn", "Marques", "Marquez", "Marquis"+    , "Marquise", "Marrion", "Marsh", "Marshal", "Marshall", "Mart"+    , "Martell", "Martez", "Martin", "Marty", "Marvin", "Masao", "Mason"+    , "Mat", "Mateo", "Math", "Mathew", "Mathews", "Mathias", "Matias"+    , "Matt", "Matteo", "Matthew", "Matthias", "Maurice", "Mauricio", "Mauro"+    , "Maury", "Maverick", "Max", "Maxie", "Maxim", "Maximilian"+    , "Maximiliano", "Maximillian", "Maximo", "Maximus", "Maxwell", "Maxx"+    , "May", "Maynard", "Mayo", "Mcarthur", "Mckinley", "Mearl", "Mekhi"+    , "Mel", "Melbourne", "Mell", "Melton", "Melville", "Melvin", "Melvyn"+    , "Memphis", "Menachem", "Mercer", "Merl", "Merle", "Merlin", "Merlyn"+    , "Merrill", "Merritt", "Merton", "Mervin", "Mervyn", "Merwin", "Messiah"+    , "Metro", "Meyer", "Micah", "Michael", "Michal", "Michale", "Micheal"+    , "Michel", "Michial", "Mickey", "Micky", "Miguel", "Miguelangel"+    , "Mikal", "Mike", "Mikeal", "Mikel", "Mikhail", "Milan", "Milas"+    , "Milburn", "Miles", "Milford", "Millard", "Miller", "Mills", "Milo"+    , "Milton", "Miner", "Minor", "Minoru", "Misael", "Mitch", "Mitchel"+    , "Mitchell", "Moe", "Mohamed", "Mohammad", "Mohammed", "Moises"+    , "Monroe", "Mont", "Montana", "Monte", "Montel", "Montgomery", "Montie"+    , "Montrell", "Monty", "Moody", "Mordechai", "Morgan", "Morris"+    , "Mortimer", "Morton", "Mose", "Moses", "Moshe", "Muhammad", "Murdock"+    , "Murl", "Murphy", "Murray", "Murry", "Mustafa", "Mychal", "Myer"+    , "Mykel", "Myles", "Myrl", "Myron", "Myrtle", "Najee", "Nakia", "Namon"+    , "Napoleon", "Nash", "Nasir", "Nat", "Nathan", "Nathanael", "Nathanial"+    , "Nathaniel", "Nathen", "Neal", "Ned", "Needham", "Neely", "Nehemiah"+    , "Neil", "Nello", "Nels", "Nelson", "Nery", "Nestor", "Nevin", "Newell"+    , "Newman", "Newt", "Newton", "Nicholas", "Nicholaus", "Nick", "Nicklaus"+    , "Nickolas", "Nicky", "Nico", "Nicolas", "Nigel", "Nikhil", "Nikko"+    , "Niko", "Nikolai", "Nikolas", "Nile", "Niles", "Nils", "Nim", "Noah"+    , "Noble", "Noe", "Noel", "Nolan", "Nolen", "Norbert", "Norberto"+    , "Norman", "Normand", "Norris", "North", "Norton", "Norval", "Norwood"+    , "Nunzio", "Oakley", "Obe", "Obed", "Obie", "Ocie", "Octave", "Octavio"+    , "Octavius", "Oda", "Oddie", "Odell", "Odie", "Odin", "Odis", "Odus"+    , "Offie", "Ogden", "Okey", "Ola", "Olaf", "Olan", "Oland", "Ole", "Olen"+    , "Oley", "Olie", "Olin", "Oliver", "Ollie", "Olof", "Omar", "Omari"+    , "Omarion", "Omer", "Oneal", "Ora", "Oral", "Oran", "Orange", "Oren"+    , "Orie", "Orin", "Orion", "Oris", "Orla", "Orland", "Orlando", "Orley"+    , "Orlin", "Orlo", "Orren", "Orrie", "Orrin", "Orris", "Orson", "Orval"+    , "Orvel", "Orvil", "Orville", "Orvin", "Orvis", "Osbaldo", "Osborn"+    , "Osborne", "Oscar", "Osie", "Ossie", "Osvaldo", "Oswald", "Oswaldo"+    , "Otha", "Othel", "Otho", "Otis", "Ott", "Ottie", "Ottis", "Otto", "Ova"+    , "Ovid", "Ovila", "Owen", "Owens", "Ozell", "Ozie", "Ozzie", "Pablo"+    , "Page", "Palmer", "Paris", "Park", "Parker", "Parley", "Parrish"+    , "Pascal", "Pasquale", "Pat", "Pate", "Patric", "Patrick", "Paul"+    , "Paulo", "Paxton", "Payton", "Pearley", "Pedro", "Percival", "Percy"+    , "Perley", "Pernell", "Perry", "Pershing", "Pete", "Peter", "Peyton"+    , "Phil", "Philip", "Phillip", "Philo", "Phoenix", "Pierce", "Pierre"+    , "Pinkney", "Pleas", "Pleasant", "Ples", "Plummer", "Polk", "Porfirio"+    , "Porter", "Posey", "Powell", "Pranav", "Pratt", "Prentice", "Prentiss"+    , "Presley", "Press", "Preston", "Price", "Primus", "Prince", "Prosper"+    , "Pryor", "Purl", "Quentin", "Quincy", "Quinn", "Quint", "Quinten"+    , "Quintin", "Quinton", "Rae", "Raekwon", "Rafael", "Rafe", "Raheem"+    , "Rahn", "Rahsaan", "Rahul", "Raiden", "Rakeem", "Raleigh", "Ralph"+    , "Ramiro", "Ramon", "Ramsey", "Rance", "Rand", "Randal", "Randall"+    , "Randel", "Randell", "Randle", "Randolf", "Randolph", "Randy", "Ransom"+    , "Raoul", "Raphael", "Raquan", "Ras", "Rashaad", "Rashaan", "Rashad"+    , "Rashawn", "Rasheed", "Raul", "Raven", "Ray", "Rayan", "Rayburn"+    , "Rayfield", "Rayford", "Raymon", "Raymond", "Raymundo", "Raynard"+    , "Rayshawn", "Reagan", "Reason", "Red", "Redden", "Redmond", "Reece"+    , "Reed", "Reese", "Refugio", "Regan", "Reggie", "Reginal", "Reginald"+    , "Regis", "Reid", "Reilly", "Reinaldo", "Reinhold", "Reino", "Remington"+    , "Remy", "Renaldo", "Renard", "Rene", "Reno", "Reuben", "Reubin", "Rex"+    , "Rexford", "Rey", "Reyes", "Reynaldo", "Reynold", "Reynolds", "Rhett"+    , "Rhoda", "Rhys", "Rian", "Ricardo", "Ricci", "Rice", "Rich", "Richard"+    , "Richie", "Richmond", "Rick", "Rickey", "Ricki", "Rickie", "Ricky"+    , "Rico", "Ridge", "Rigoberto", "Riley", "Rishi", "Ritchie", "River"+    , "Rob", "Robb", "Robbie", "Robbin", "Robby", "Robert", "Roberto"+    , "Robin", "Robley", "Robt", "Roby", "Rocco", "Rock", "Rocky", "Rod"+    , "Roddy", "Roderic", "Roderick", "Rodger", "Rodney", "Rodolfo"+    , "Rodrick", "Rodrigo", "Roe", "Roel", "Rogelio", "Roger", "Rogers"+    , "Rohan", "Roland", "Rolando", "Rolf", "Roll", "Rolla", "Rolland"+    , "Rollie", "Rollin", "Rollo", "Roma", "Roman", "Rome", "Romello"+    , "Romeo", "Romie", "Ron", "Ronal", "Ronald", "Ronaldo", "Ronan"+    , "Rondal", "Ronin", "Ronnie", "Ronny", "Roosevelt", "Rory", "Rosario"+    , "Rosco", "Roscoe", "Rosendo", "Rosevelt", "Ross", "Rossie", "Roswell"+    , "Rowan", "Rowland", "Roy", "Royal", "Royce", "Rube", "Ruben", "Rubin"+    , "Ruby", "Rudolf", "Rudolfo", "Rudolph", "Rudy", "Rueben", "Ruel"+    , "Ruffin", "Ruffus", "Rufus", "Rupert", "Rush", "Russ", "Russel"+    , "Russell", "Rustin", "Rusty", "Rutherford", "Ryan", "Ryder", "Ryker"+    , "Rylan", "Ryland", "Rylee", "Ryley", "Ryne", "Sabastian", "Sage"+    , "Saint", "Sal", "Salomon", "Salvador", "Salvatore", "Sam", "Samie"+    , "Samir", "Sammie", "Sammy", "Sampson", "Samson", "Samual", "Samuel"+    , "Sanders", "Sandy", "Sanford", "Santana", "Santiago", "Santino"+    , "Santo", "Santos", "Saul", "Saverio", "Savion", "Savon", "Sawyer"+    , "Schley", "Schuyler", "Scot", "Scott", "Scottie", "Scotty", "Seaborn"+    , "Seamus", "Sean", "Sebastian", "Sedrick", "Seldon", "Selmer", "Semaj"+    , "Seneca", "Sergio", "Seth", "Severo", "Severt", "Seward", "Seymour"+    , "Shad", "Shade", "Shafter", "Shamar", "Shan", "Shane", "Shannon"+    , "Shanon", "Shaquan", "Shaquille", "Sharif", "Sharon", "Shaun", "Shawn"+    , "Shay", "Shayne", "Shea", "Shedrick", "Shelby", "Sheldon", "Shelley"+    , "Shellie", "Shelly", "Shelton", "Shemar", "Shep", "Shepherd"+    , "Sheridan", "Sherman", "Sherrill", "Sherwin", "Sherwood", "Shirley"+    , "Shoji", "Shon", "Shyheim", "Sid", "Sidney", "Sie", "Sigmund", "Sigurd"+    , "Silas", "Silver", "Silvester", "Silvio", "Sim", "Simeon", "Simmie"+    , "Simon", "Simpson", "Sincere", "Sing", "Skip", "Skylar", "Skyler"+    , "Slade", "Smith", "Sol", "Soloman", "Solomon", "Solon", "Son", "Sonny"+    , "Soren", "Spencer", "Spenser", "Spurgeon", "Squire", "Stacey", "Stacy"+    , "Stafford", "Stan", "Stanford", "Stanislaus", "Stanley", "Stanton"+    , "Starling", "Stefan", "Stephan", "Stephanie", "Stephen", "Stephon"+    , "Sterling", "Stetson", "Stevan", "Steve", "Steven", "Stevie", "Steward"+    , "Stewart", "Stone", "Stonewall", "Stoney", "Storm", "Stuart"+    , "Sullivan", "Sumner", "Susie", "Sydney", "Syed", "Sylas", "Sylvan"+    , "Sylvanus", "Sylvester", "Tab", "Tad", "Taft", "Tahj", "Taj", "Tal"+    , "Talan", "Talen", "Tallie", "Talmadge", "Talmage", "Talon", "Tandy"+    , "Tanner", "Tarik", "Tariq", "Tate", "Tatsuo", "Taurean", "Taurus"+    , "Tavares", "Tavaris", "Tavian", "Tavion", "Tavon", "Tayler", "Taylor"+    , "Tayshaun", "Teagan", "Ted", "Teddie", "Teddy", "Tegan", "Telly"+    , "Terance", "Terell", "Terence", "Terrance", "Terrell", "Terrence"+    , "Terrill", "Terry", "Tevin", "Tex", "Thad", "Thaddeus", "Theadore"+    , "Thedore", "Theo", "Theodis", "Theodore", "Theophile", "Therman"+    , "Theron", "Thomas", "Thompson", "Thor", "Thornton", "Thorwald", "Thos"+    , "Thurlow", "Thurman", "Thurston", "Tilden", "Tillman", "Tilman", "Tim"+    , "Timmie", "Timmothy", "Timmy", "Timothy", "Tito", "Titus", "Tobe"+    , "Tobias", "Tobie", "Tobin", "Toby", "Tod", "Todd", "Toivo", "Tolbert"+    , "Tollie", "Tom", "Toma", "Tomas", "Tomie", "Tommie", "Tommy", "Toney"+    , "Tony", "Torey", "Toriano", "Torrance", "Torrence", "Torrey", "Torry"+    , "Tory", "Toshio", "Toy", "Trace", "Tracey", "Tracy", "Trae", "Travis"+    , "Travon", "Trayvon", "Tre", "Tremaine", "Tremayne", "Trent", "Trenten"+    , "Trenton", "Trever", "Trevin", "Trevion", "Trevon", "Trevor", "Trey"+    , "Treyton", "Treyvon", "Trinidad", "Trinity", "Tripp", "Tristan"+    , "Tristen", "Tristian", "Tristin", "Triston", "Troy", "True", "Trumaine"+    , "Truman", "Trystan", "Tuan", "Tucker", "Turner", "Ty", "Tye", "Tyler"+    , "Tylor", "Tyquan", "Tyree", "Tyreek", "Tyreese", "Tyrek", "Tyreke"+    , "Tyrel", "Tyrell", "Tyrese", "Tyrik", "Tyrin", "Tyriq", "Tyrique"+    , "Tyron", "Tyrone", "Tyrus", "Tyshawn", "Tyson", "Ulises", "Ulysses"+    , "Unknown", "Unnamed", "Urban", "Uriah", "Uriel", "Urijah", "Val"+    , "Valentin", "Valentine", "Valentino", "Van", "Vance", "Vander"+    , "Vashon", "Vaughn", "Vera", "Vere", "Vergil", "Verl", "Verle", "Verlin"+    , "Verlon", "Verlyn", "Vern", "Verna", "Vernal", "Verne", "Vernell"+    , "Verner", "Vernie", "Vernon", "Vester", "Vic", "Vicente", "Vick"+    , "Victor", "Victoriano", "Vidal", "Vince", "Vincent", "Vincenzo"+    , "Vinson", "Vinton", "Virge", "Virgel", "Virgie", "Virgil", "Virgle"+    , "Vito", "Vollie", "Volney", "Von", "Wade", "Waino", "Waldemar", "Waldo"+    , "Walker", "Wallace", "Wally", "Walt", "Walter", "Walton", "Ward"+    , "Wardell", "Warner", "Warren", "Wash", "Washington", "Watson", "Watt"+    , "Waverly", "Wayde", "Wayland", "Waylon", "Wayman", "Waymon", "Wayne"+    , "Weaver", "Webb", "Webster", "Weldon", "Wellington", "Wells", "Welton"+    , "Wendel", "Wendell", "Wenzel", "Werner", "Wes", "Wesley", "Wess"+    , "West", "Westin", "Westley", "Weston", "Wheeler", "Whit", "Whitney"+    , "Wilber", "Wilbert", "Wilbur", "Wilburn", "Wiley", "Wilford", "Wilfred"+    , "Wilfredo", "Wilfrid", "Wilhelm", "Wiliam", "Wilkie", "Will", "Willaim"+    , "Willam", "Willard", "William", "Williams", "Willian", "Williard"+    , "Willie", "Willis", "Willy", "Wilmer", "Wilson", "Wilton", "Windell"+    , "Winfield", "Winford", "Winfred", "Wing", "Winifred", "Winnie"+    , "Winston", "Winthrop", "Winton", "Wirt", "Wm", "Wong", "Wood", "Woodie"+    , "Woodroe", "Woodrow", "Woodson", "Woody", "Worley", "Worth", "Wright"+    , "Wyatt", "Wylie", "Wyman", "Xander", "Xavier", "Xzavier", "Yaakov"+    , "Yadiel", "Yael", "Yahir", "Yair", "Yancy", "Yandel", "Yee", "Yehuda"+    , "Yoel", "York", "Yosef", "Yoshio", "Young", "Yurem", "Yusuf"+    , "Zachariah", "Zachary", "Zachery", "Zack", "Zackary", "Zackery", "Zaid"+    , "Zaiden", "Zain", "Zaire", "Zakary", "Zander", "Zane", "Zavier"+    , "Zavion", "Zayden", "Zayne", "Zeb", "Zebulon", "Zechariah", "Zed"+    , "Zeke", "Zenas", "Zeno", "Zigmund", "Zion", "Zollie"+    ]++lastName :: FGen SingleWord+lastName = elements+    [ "Smith", "Johnson", "Williams", "Jones", "Brown", "Davis", "Miller"+    , "Wilson", "Moore", "Taylor", "Anderson", "Thomas", "Jackson", "White"+    , "Harris", "Martin", "Thompson", "Garcia", "Martinez", "Robinson", "Clark"+    , "Rodriguez", "Lewis", "Lee", "Walker", "Hall", "Allen", "Young", "Hernandez"+    , "King", "Wright", "Lopez", "Hill", "Scott", "Green", "Adams", "Baker"+    , "Gonzalez", "Nelson", "Carter", "Mitchell", "Perez", "Roberts", "Turner"+    , "Phillips", "Campbell", "Parker", "Evans", "Edwards", "Collins", "Stewart"+    , "Sanchez", "Morris", "Rogers", "Reed", "Cook", "Morgan", "Bell", "Murphy"+    , "Bailey", "Rivera", "Cooper", "Richardson", "Cox", "Howard", "Ward", "Torres"+    , "Peterson", "Gray", "Ramirez", "James", "Watson", "Brooks", "Sanders"+    , "Price", "Bennett", "Wood", "Barnes", "Ross", "Henderson", "Coleman"+    , "Jenkins", "Perry", "Powell", "Long", "Patterson", "Hughes", "Flores"+    , "Washington", "Butler", "Simmons", "Foster", "Gonzales", "Bryant"+    , "Alexander", "Russell", "Griffin", "Diaz", "Hayes"+    ]
+ src/Fake/Provider/PhoneNumber/EN_US.hs view
@@ -0,0 +1,29 @@+{-# LANGUAGE OverloadedStrings #-}++module Fake.Provider.PhoneNumber.EN_US where++------------------------------------------------------------------------------+import           Data.Text (Text)+import qualified Data.Text as T+import           Text.Printf+------------------------------------------------------------------------------+import           Fake.Combinators+import           Fake.Types+import           Fake.Utils+------------------------------------------------------------------------------++------------------------------------------------------------------------------+-- | Generates US style phone numbers.+phoneNumber :: FGen Text+phoneNumber = do+    area <- areaCode+    exch <- exchangeCode+    suff <- fakeNumberScheme $ NumberScheme "####"+    let fmt f = T.pack $ printf f area exch suff+    elements $ map fmt ["(%s) %s-%s", "%s-%s-%s"]++areaCode :: FGen Text+areaCode = elements ["201", "202", "203", "205", "206", "207", "208", "209", "210", "212", "213", "214", "215", "216", "217", "218", "219", "224", "225", "226", "228", "229", "231", "234", "239", "240", "248", "251", "252", "253", "254", "256", "260", "262", "267", "269", "270", "276", "281", "301", "302", "303", "304", "305", "307", "308", "309", "310", "312", "313", "314", "315", "316", "317", "318", "319", "320", "321", "323", "330", "334", "336", "337", "339", "347", "351", "352", "360", "361", "386", "401", "402", "404", "405", "406", "407", "408", "409", "410", "412", "413", "414", "415", "417", "419", "423", "424", "425", "434", "435", "440", "443", "469", "478", "479", "480", "484", "501", "502", "503", "504", "505", "507", "508", "509", "510", "512", "513", "515", "516", "517", "518", "520", "530", "540", "541", "551", "559", "561", "562", "563", "567", "570", "571", "573", "574", "580", "585", "586", "601", "602", "603", "605", "606", "607", "608", "609", "610", "612", "614", "615", "616", "617", "618", "619", "620", "623", "626", "630", "631", "636", "641", "646", "650", "651", "660", "661", "662", "678", "682", "701", "702", "703", "704", "706", "707", "708", "712", "713", "714", "715", "716", "717", "718", "719", "720", "724", "727", "731", "732", "734", "740", "754", "757", "760", "763", "765", "770", "772", "773", "774", "775", "781", "785", "786", "801", "802", "803", "804", "805", "806", "808", "810", "812", "813", "814", "815", "816", "817", "818", "828", "830", "831", "832", "843", "845", "847", "848", "850", "856", "857", "858", "859", "860", "862", "863", "864", "865", "870", "878", "901", "903", "904", "906", "907", "908", "909", "910", "912", "913", "914", "915", "916", "917", "918", "919", "920", "925", "928", "931", "936", "937", "940", "941", "947", "949", "952", "954", "956", "970", "971", "972", "973", "978", "979", "980", "985", "989"]++exchangeCode :: FGen Text+exchangeCode = elements ["201", "202", "203", "205", "206", "207", "208", "209", "210", "212", "213", "214", "215", "216", "217", "218", "219", "224", "225", "227", "228", "229", "231", "234", "239", "240", "248", "251", "252", "253", "254", "256", "260", "262", "267", "269", "270", "276", "281", "283", "301", "302", "303", "304", "305", "307", "308", "309", "310", "312", "313", "314", "315", "316", "317", "318", "319", "320", "321", "323", "330", "331", "334", "336", "337", "339", "347", "351", "352", "360", "361", "386", "401", "402", "404", "405", "406", "407", "408", "409", "410", "412", "413", "414", "415", "417", "419", "423", "424", "425", "434", "435", "440", "443", "445", "464", "469", "470", "475", "478", "479", "480", "484", "501", "502", "503", "504", "505", "507", "508", "509", "510", "512", "513", "515", "516", "517", "518", "520", "530", "540", "541", "551", "557", "559", "561", "562", "563", "564", "567", "570", "571", "573", "574", "580", "585", "586", "601", "602", "603", "605", "606", "607", "608", "609", "610", "612", "614", "615", "616", "617", "618", "619", "620", "623", "626", "630", "631", "636", "641", "646", "650", "651", "660", "661", "662", "667", "678", "682", "701", "702", "703", "704", "706", "707", "708", "712", "713", "714", "715", "716", "717", "718", "719", "720", "724", "727", "731", "732", "734", "737", "740", "754", "757", "760", "763", "765", "770", "772", "773", "774", "775", "781", "785", "786", "801", "802", "803", "804", "805", "806", "808", "810", "812", "813", "814", "815", "816", "817", "818", "828", "830", "831", "832", "835", "843", "845", "847", "848", "850", "856", "857", "858", "859", "860", "862", "863", "864", "865", "870", "872", "878", "901", "903", "904", "906", "907", "908", "909", "910", "912", "913", "914", "915", "916", "917", "918", "919", "920", "925", "928", "931", "936", "937", "940", "941", "947", "949", "952", "954", "956", "959", "970", "971", "972", "973", "975", "978", "979", "980", "984", "985", "989"]
+ src/Fake/Provider/UserAgent.hs view
@@ -0,0 +1,202 @@+{-# LANGUAGE ScopedTypeVariables #-}++module Fake.Provider.UserAgent where++------------------------------------------------------------------------------+import Data.Monoid+import Data.Time+import Text.Printf+------------------------------------------------------------------------------+import Fake.Combinators+import Fake.Provider.DateTime+import Fake.Provider.Locale+import Fake.Types+------------------------------------------------------------------------------++------------------------------------------------------------------------------+-- | Fake user agent strings using a uniform distribution across the five+-- major browsers.+userAgent :: FGen String+userAgent = oneof+    [ chromeUserAgent+    , internetExplorerUserAgent+    , firefoxUserAgent+    , safariUserAgent+    , operaUserAgent+    ]++------------------------------------------------------------------------------+-- | Fake user agent strings using a real-world distribution across the five+-- major browsers.+userAgentRealDist :: FGen String+userAgentRealDist = frequency+    -- Browser stats from https://www.w3schools.com/browsers/default.asp+    [ (768, chromeUserAgent)+    , (43, internetExplorerUserAgent)+    , (125, firefoxUserAgent)+    , (33, safariUserAgent)+    , (16, operaUserAgent)+    ]++------------------------------------------------------------------------------+-- | Fake user agent strings for Chrome.+chromeUserAgent :: FGen String+chromeUserAgent = do+    plat <- fakePlatform+    appleA <- fakeInt 531 536+    appleB <- fakeInt 0 2+    let saf = show appleA <> "." <> show appleB+    chromeMajor <- fakeInt 13 15+    chromeMinor <- fakeInt 800 899+    let rest = printf+          "(%s) AppleWebKit/%s (KHTML, like Gecko) Chrome/%d.0.%d.0 Safari/%s"+          plat saf chromeMajor chromeMinor saf+    return $ "Mozilla/5.0 " <> rest++------------------------------------------------------------------------------+-- | Fake user agent strings for Internet Explorer.+internetExplorerUserAgent :: FGen String+internetExplorerUserAgent = do+    plat <- windowsPlatform+    a <- fakeInt 5 9+    b <- fakeInt 3 5+    c <- fakeInt 0 1+    return $ printf "Mozilla/5.0 (compatible; MSIE %d.0; %s; Trident/%d.%d)"+                    a plat b c++underscoreToDash :: Char -> Char+underscoreToDash '_' = '-'+underscoreToDash c = c++dayStr :: Day -> String+dayStr = formatTime defaultTimeLocale "%Y%m%d"+++------------------------------------------------------------------------------+-- | Fake user agent strings for Firefox.+firefoxUserAgent :: FGen String+firefoxUserAgent = do+    let a :: FGen String+        a = do+          d <- dayStr <$> dayBetween (fromGregorian 2011 1 1) (fromGregorian 2017 1 1)+          n <- fakeInt 4 15+          return $ printf "Gecko/%s Firefox/%d.0" d n+        b :: FGen String+        b = do+          d <- dayStr <$> dayBetween (fromGregorian 2010 1 1) (fromGregorian 2017 1 1)+          n <- fakeInt 1 20+          return $ printf "Gecko/%s Firefox/3.6.%d" d n+        c :: FGen String+        c = do+          d <- dayStr <$> dayBetween (fromGregorian 2010 1 1) (fromGregorian 2017 1 1)+          return $ printf "Gecko/%s Firefox/3.8" d+    ver <- oneof [a, b, c]++    let win :: FGen String+        win = do+          plat <- windowsPlatform+          l <- fmap underscoreToDash <$> fakeLocale+          n <- fakeInt 0 2+          return $ printf "(%s; %s; rv:1.9.%d.20) %s"+                          plat l n ver+        lin :: FGen String+        lin = do+          plat <- linuxPlatform+          n <- fakeInt 5 7+          return $ printf "(%s; rv:1.9.%d.20) %s" plat n ver++        mac :: FGen String+        mac = do+          plat <- macPlatform+          n <- fakeInt 2 6+          return $ printf "(%s; rv:1.9.%d.20) %s" plat n+    plat <- oneof [win, lin, mac]+    return $ "Mozilla/5.0 " <> plat+++------------------------------------------------------------------------------+-- | Fake user agent strings for Safari.+safariUserAgent :: FGen String+safariUserAgent = do+    saf :: String <- do+        a <- fakeInt 531 535+        b <- fakeInt 1 50+        c <- fakeInt 1 7+        return $ printf "%d.%d.%d" a b c+    twoVers <- elements [False, True]+    ver :: String <- if twoVers+             then printf "%d.%d" <$> fakeInt 4 5 <*> fakeInt 0 1+             else printf "%d.0.%d" <$> fakeInt 4 5 <*> fakeInt 1 5++    let win :: FGen String+        win = do+          plat <- windowsPlatform+          return $ printf "(Windows; U; %s) AppleWebKit/%s (KHTML, like Gecko) Version/%s Safari/%s"+                          plat saf ver saf+        mac :: FGen String+        mac = do+          plat <- macPlatform+          n <- fakeInt 2 6+          l <- fmap underscoreToDash <$> fakeLocale+          return $ printf "(%s rv:%d.0; %s) AppleWebKit/%s (KHTML, like Gecko) Version/%s Safari/%s"+                          plat n l saf ver saf+        ipod :: FGen String+        ipod = do+          a <- fakeInt 3 4+          b <- fakeInt 0 3+          c <- fakeInt 3 4+          d <- fakeInt 111 119+          l <- fmap underscoreToDash <$> fakeLocale+          return $ printf "(iPod; U; CPU iPhone OS %d_%d like Mac OS X; %s) AppleWebKit/%s (KHTML, like Gecko) Version/%d.0.5 Mobile/8B%d Safari/6%s"+                          a b l saf c d saf++    plat <- oneof [win, mac, ipod]+    return $ "Mozilla/5.0 " <> plat+++------------------------------------------------------------------------------+-- | Fake user agent strings for Opera.+operaUserAgent :: FGen String+operaUserAgent = do+    let getPlat = do+          useLinux <- elements [False, True]+          if useLinux then linuxPlatform else windowsPlatform+    let plat :: FGen String = printf "(%s; %s) Presto/2.9.%d Version/%d.00"+          <$> getPlat+          <*> fmap (fmap underscoreToDash) fakeLocale+          <*> fakeInt 160 190+          <*> fakeInt 10 12++    printf "Opera/%d.%d.%s"+      <$> fakeInt 8 9+      <*> fakeInt 10 99+      <*> plat++fakePlatform :: FGen String+fakePlatform = oneof [windowsPlatform, linuxPlatform, macPlatform]++windowsPlatform :: FGen String+windowsPlatform = elements+  [ "Windows 95", "Windows 98", "Windows 98; Win 9x 4.90", "Windows CE"+  , "Windows NT 4.0", "Windows NT 5.0", "Windows NT 5.01"+  , "Windows NT 5.1", "Windows NT 5.2", "Windows NT 6.0", "Windows NT 6.1"+  , "Windows NT 6.2"+  ]++linuxPlatform :: FGen String+linuxPlatform = do+    processor <- linuxProcessor+    return $ "X11; Linux " <> processor++macPlatform :: FGen String+macPlatform = do+    processor <- macProcessor+    b <- fakeInt 5 8+    c <- fakeInt 0 9+    return $ printf "Macintosh; %s Mac OS X 10_%d_%d" processor b c++linuxProcessor :: FGen String+linuxProcessor = elements ["i686", "x86_64"]++macProcessor :: FGen String+macProcessor = elements ["Intel", "PPC", "U; Intel", "U; PPC"]
+ src/Fake/Types.hs view
@@ -0,0 +1,36 @@+module Fake.Types where++------------------------------------------------------------------------------+import Control.Monad+import System.Random+------------------------------------------------------------------------------++newtype FGen a = MkFGen { unFGen :: StdGen -> a }++instance Functor FGen where+  fmap f (MkFGen h) =+    MkFGen (\r -> f (h r))++instance Applicative FGen where+  pure  = return+  (<*>) = ap++instance Monad FGen where+  return x =+    MkFGen (\_ -> x)++  MkFGen m >>= k =+    MkFGen (\r ->+      let (r1,r2)  = split r+          MkFGen m' = k (m r1)+       in m' r2+    )+++------------------------------------------------------------------------------+-- | Run a generator to generate a random value in the IO monad.+generate :: FGen a -> IO a+generate (MkFGen g) = do+    r <- newStdGen+    return (g r)+
+ src/Fake/Utils.hs view
@@ -0,0 +1,54 @@+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+module Fake.Utils where++------------------------------------------------------------------------------+import           Data.String+import           Data.Text (Text)+import           GHC.Exts+------------------------------------------------------------------------------+import           Fake.Combinators+import           Fake.Types+------------------------------------------------------------------------------++numerify :: Char -> FGen Char+numerify '#' = fakeDigit+numerify '%' = fakeDigitNonzero+-- TODO Original Python also includes empty string for ! and @.  We might+-- consider duplicating that behavior later, but for now this behavior will+-- work since it generates a strict subset of the things the original+-- generates.+numerify '!' = fakeDigit+numerify '@' = fakeDigitNonzero+numerify c = return c++lexify :: [Char] -> Char -> FGen Char+lexify letters '?' = elements letters+lexify _ c = return c++bothify :: [Char] -> Char -> FGen Char+bothify _ '#' = fakeDigit+bothify _ '%' = fakeDigitNonzero+bothify _ '!' = fakeDigit+bothify _ '@' = fakeDigitNonzero+bothify letters '?' = elements letters+bothify _ c = return c++newtype NumberScheme = NumberScheme { unNumberScheme :: Text }+  deriving (Eq,Ord,Read,Show,IsString)++fakeNumberScheme :: NumberScheme -> FGen Text+fakeNumberScheme (NumberScheme t) = fmap fromList $ mapM numerify $ toList t++newtype AlphaScheme = AlphaScheme { unAlphaScheme :: Text }+  deriving (Eq,Ord,Read,Show,IsString)++fakeAlphaScheme :: AlphaScheme -> FGen Text+fakeAlphaScheme (AlphaScheme t) =+    fmap fromList $ mapM (lexify ['a'..'z']) $ toList t++newtype AlphaNumScheme = AlphaNumScheme { unAlphaNumScheme :: Text }+  deriving (Eq,Ord,Read,Show,IsString)++fakeAlphaNumScheme :: AlphaNumScheme -> FGen Text+fakeAlphaNumScheme (AlphaNumScheme t) =+    fmap fromList $ mapM (bothify ['a'..'z']) $ toList t
+ test/Main.hs view
@@ -0,0 +1,103 @@+{-# OPTIONS_GHC -fno-warn-orphans #-}+{-# LANGUAGE DeriveGeneric        #-}++module Main where++------------------------------------------------------------------------------+import           Data.Foldable+import           Data.Time+import           GHC.Generics+import           System.Random+import           Test.Hspec+import           Data.Text (unpack)+------------------------------------------------------------------------------+import           Fake.Cover+import           Fake.Combinators+import           Fake.Provider.Lang+import           Fake.Provider.Person.EN_US+import           Fake.Types+------------------------------------------------------------------------------++testFake :: FGen a -> a+testFake (MkFGen f) = f $ mkStdGen 5++tc :: Coverage a -> [a]+tc = testFake . sequence . unCoverage++------------------------------------------------------------------------------+main :: IO ()+main = hspec $ do+    describe "Fake.Cover" $ do+      it "Maybe Int" $+        tc gcover `shouldBe` [Nothing, Just (94 :: Int)]+      it "Either Int Char" $+        tc gcover `shouldBe` [Left (53 :: Int), Right 't']+      it "(Maybe Int, ThreePhonetic)" $+        tc gcover `shouldBe`+        [(Nothing,Alpha),(Just (84 :: Int),Bravo),(Nothing,Charlie)]+      it "(Either ThreePhonetic Four)" $+        tc gcover `shouldBe`+        [ Left Alpha+        , Left Bravo+        , Left Charlie+        , Right (MOne 96)+        , Right (MTwo 'k')+        , Right (MThree 12)+        , Right (MFour 'v')+        ]+      -- Since Person contains one Maybe field, cover should generate two values+      it "Person" $+        tc cover `shouldBe`+        [ Person "Maeve" "Russell" (fromGregorian 1958 10 12) Nothing+        , Person "Lavern" "Brooks" (fromGregorian 1966 07 21) (Just "123-45-6789")+        ]++instance Cover Int where+    cover = Coverage [fakeInt 0 100]++instance Cover Char where+    cover = Coverage [fakeLetter]++data ThreePhonetic = Alpha | Bravo | Charlie+  deriving (Eq,Ord,Show,Generic)++instance Cover ThreePhonetic where+    cover = gcover++data Four = MOne Int+          | MTwo Char+          | MThree Int+          | MFour Char+  deriving (Eq,Ord,Show,Generic)++instance Cover Four where+    cover = gcover++birthdayCoverage :: Coverage Day+birthdayCoverage = fromGregorian+    <$> Coverage [fakeEnumFromTo 1950 2017]+    <*> Coverage [fakeInt 1 12]+    <*> Coverage [fakeInt 1 31]++ssnCoverage :: Coverage String+ssnCoverage = Coverage [elements ["123-45-6789", "000-00-0000"]]++data Person = Person+  { personFirstName :: String+  , personLastName  :: String+  , personBirthdate :: Day+  , personSSN       :: Maybe String+  } deriving (Eq,Ord,Show,Generic)++------------------------------------------------------------------------------+-- | Must be able to define a Cover instnance for Person without needing to+-- define instances for Day and String.+--instance Cover Person where+--    cover = gcover++instance Cover Person where+  cover = Person+    <$> fmap unpack (Coverage [unSingleWord <$> firstName])+    <*> fmap unpack (Coverage [unSingleWord <$> lastName])+    <*> birthdayCoverage+    <*> asum [ pure Nothing, Just <$> ssnCoverage ]