diff --git a/ChangeLog.md b/ChangeLog.md
new file mode 100644
--- /dev/null
+++ b/ChangeLog.md
@@ -0,0 +1,5 @@
+# Revision history for fake
+
+## 0.1  -- 2018-03-14
+
+* First version. Released on an unsuspecting world.
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -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.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/fake.cabal b/fake.cabal
new file mode 100644
--- /dev/null
+++ b/fake.cabal
@@ -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
diff --git a/src/Fake.hs b/src/Fake.hs
new file mode 100644
--- /dev/null
+++ b/src/Fake.hs
@@ -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
+
diff --git a/src/Fake/Class.hs b/src/Fake/Class.hs
new file mode 100644
--- /dev/null
+++ b/src/Fake/Class.hs
@@ -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
+
diff --git a/src/Fake/Combinators.hs b/src/Fake/Combinators.hs
new file mode 100644
--- /dev/null
+++ b/src/Fake/Combinators.hs
@@ -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'
+
diff --git a/src/Fake/Cover.hs b/src/Fake/Cover.hs
new file mode 100644
--- /dev/null
+++ b/src/Fake/Cover.hs
@@ -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
diff --git a/src/Fake/Provider/Address/EN_US.hs b/src/Fake/Provider/Address/EN_US.hs
new file mode 100644
--- /dev/null
+++ b/src/Fake/Provider/Address/EN_US.hs
@@ -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"])
+    ]
diff --git a/src/Fake/Provider/DateTime.hs b/src/Fake/Provider/DateTime.hs
new file mode 100644
--- /dev/null
+++ b/src/Fake/Provider/DateTime.hs
@@ -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
diff --git a/src/Fake/Provider/IdNumber/EN_US.hs b/src/Fake/Provider/IdNumber/EN_US.hs
new file mode 100644
--- /dev/null
+++ b/src/Fake/Provider/IdNumber/EN_US.hs
@@ -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
diff --git a/src/Fake/Provider/Lang.hs b/src/Fake/Provider/Lang.hs
new file mode 100644
--- /dev/null
+++ b/src/Fake/Provider/Lang.hs
@@ -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
+
diff --git a/src/Fake/Provider/Lang/EN_US.hs b/src/Fake/Provider/Lang/EN_US.hs
new file mode 100644
--- /dev/null
+++ b/src/Fake/Provider/Lang/EN_US.hs
@@ -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"]
diff --git a/src/Fake/Provider/Locale.hs b/src/Fake/Provider/Locale.hs
new file mode 100644
--- /dev/null
+++ b/src/Fake/Provider/Locale.hs
@@ -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"])
+    ]
diff --git a/src/Fake/Provider/Person/EN_US.hs b/src/Fake/Provider/Person/EN_US.hs
new file mode 100644
--- /dev/null
+++ b/src/Fake/Provider/Person/EN_US.hs
@@ -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"
+    ]
diff --git a/src/Fake/Provider/PhoneNumber/EN_US.hs b/src/Fake/Provider/PhoneNumber/EN_US.hs
new file mode 100644
--- /dev/null
+++ b/src/Fake/Provider/PhoneNumber/EN_US.hs
@@ -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"]
diff --git a/src/Fake/Provider/UserAgent.hs b/src/Fake/Provider/UserAgent.hs
new file mode 100644
--- /dev/null
+++ b/src/Fake/Provider/UserAgent.hs
@@ -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"]
diff --git a/src/Fake/Types.hs b/src/Fake/Types.hs
new file mode 100644
--- /dev/null
+++ b/src/Fake/Types.hs
@@ -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)
+
diff --git a/src/Fake/Utils.hs b/src/Fake/Utils.hs
new file mode 100644
--- /dev/null
+++ b/src/Fake/Utils.hs
@@ -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
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -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 ]
