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 +5/−0
- LICENSE +30/−0
- Setup.hs +2/−0
- fake.cabal +79/−0
- src/Fake.hs +14/−0
- src/Fake/Class.hs +53/−0
- src/Fake/Combinators.hs +167/−0
- src/Fake/Cover.hs +145/−0
- src/Fake/Provider/Address/EN_US.hs +320/−0
- src/Fake/Provider/DateTime.hs +35/−0
- src/Fake/Provider/IdNumber/EN_US.hs +32/−0
- src/Fake/Provider/Lang.hs +52/−0
- src/Fake/Provider/Lang/EN_US.hs +209/−0
- src/Fake/Provider/Locale.hs +212/−0
- src/Fake/Provider/Person/EN_US.hs +1116/−0
- src/Fake/Provider/PhoneNumber/EN_US.hs +29/−0
- src/Fake/Provider/UserAgent.hs +202/−0
- src/Fake/Types.hs +36/−0
- src/Fake/Utils.hs +54/−0
- test/Main.hs +103/−0
+ 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 ]