packages feed

fakedata 0.2.2 → 0.3.0

raw patch · 208 files changed

+3205/−1081 lines, 208 filesdep +deepseqdep +gaugedep +hashablePVP ok

version bump matches the API change (PVP)

Dependencies added: deepseq, gauge, hashable, unordered-containers

API changes (from Hackage documentation)

- Faker.Appliance: appliance :: Fake Text
- Faker.Artist: name :: Fake Text
- Faker.Football: coaches :: Fake Text
- Faker.Football: competitions :: Fake Text
- Faker.Football: players :: Fake Text
- Faker.Football: positions :: Fake Text
- Faker.Football: teams :: Fake Text
- Faker.Game.Dota: earthKnightQuote :: Fake Text
- Faker.Internal: digitToChar :: Int -> Char
- Faker.Internal: dropTillBrace :: Text -> Text
- Faker.Internal: extractSingleField :: Text -> (Text, Text)
- Faker.Internal: isHash :: Char -> Bool
- Faker.Internal: isQues :: Char -> Bool
- Faker.Internal: randomUnresolvedVec :: (MonadThrow m, MonadIO m) => FakerSettings -> (FakerSettings -> m (Unresolved (Vector Text))) -> (FakerSettings -> Text -> m Text) -> m Text
- Faker.Internal: randomUnresolvedVecWithoutVector :: (MonadThrow m, MonadIO m) => FakerSettings -> (FakerSettings -> m (Unresolved Text)) -> (FakerSettings -> Text -> m Text) -> m Text
- Faker.Internal: randomVec :: (MonadThrow m, MonadIO m) => FakerSettings -> (FakerSettings -> m (Vector a)) -> m a
- Faker.Internal: unresolvedResolver :: (MonadThrow m, MonadIO m) => (FakerSettings -> m (Unresolved (Vector Text))) -> (FakerSettings -> Text -> m Text) -> FakerSettings -> m Text
- Faker.Internal: unresolvedResolverWithoutVector :: (MonadThrow m, MonadIO m) => (FakerSettings -> m (Unresolved Text)) -> (FakerSettings -> Text -> m Text) -> FakerSettings -> m Text
- Faker.Internal: uprStr :: String -> String
- Faker.Movie.BackToTheFuture: character :: Fake Text
- Faker.Movie.BackToTheFuture: date :: Fake Text
- Faker.Movie.BackToTheFuture: quote :: Fake Text
- Faker.ProgrammingLauguage: creator :: Fake Text
- Faker.ProgrammingLauguage: name :: Fake Text
- Faker.Provider.Address: cityPrefixProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
- Faker.Provider.Address: countriesProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
- Faker.Provider.Animal: animalProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
- Faker.Provider.Artist: artistNameProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
- Faker.Provider.BackToTheFuture: bttfCharacterProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
- Faker.Provider.BackToTheFuture: bttfDatesProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
- Faker.Provider.BackToTheFuture: bttfQuoteProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
- Faker.Provider.BackToTheFuture: parseBttf :: FromJSON a => FakerSettings -> Value -> Parser a
- Faker.Provider.BackToTheFuture: parseBttfCharacter :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
- Faker.Provider.BackToTheFuture: parseBttfDates :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
- Faker.Provider.BackToTheFuture: parseBttfField :: (FromJSON a, Monoid a) => FakerSettings -> Text -> Value -> Parser a
- Faker.Provider.BackToTheFuture: parseBttfQuote :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
- Faker.Provider.Bank: swiftBicProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
- Faker.Provider.Coffee: parseCoffeeBlendNameUnresolved :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser (Unresolved a)
- Faker.Provider.Dota: dotaEarthKnightQuoteProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
- Faker.Provider.Dota: parseDotaEarthKnightQuote :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
- Faker.Provider.Name: femaleFirstNameProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
- Faker.Provider.Name: firstNameProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved (Vector Text))
- Faker.Provider.Name: lastNameProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
- Faker.Provider.Name: maleFirstNameProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
- Faker.Provider.Name: nameProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved (Vector Text))
- Faker.Provider.Name: nameWithMiddleProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved (Vector Text))
- Faker.Provider.Name: parseFemaleFirstName :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
- Faker.Provider.Name: parseFieldName :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser (Unresolved a)
- Faker.Provider.Name: parseFirstName :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser (Unresolved a)
- Faker.Provider.Name: parseLastName :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
- Faker.Provider.Name: parseMaleFirstName :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
- Faker.Provider.Name: parseNameWithMiddle :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser (Unresolved a)
- Faker.Provider.Name: parsePrefix :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
- Faker.Provider.Name: parseSuffix :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
- Faker.Provider.Name: prefixProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
- Faker.Provider.Name: suffixProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
- Faker.Provider.ProgrammingLauguage: parseProgrammingLauguage :: FromJSON a => FakerSettings -> Value -> Parser a
- Faker.Provider.ProgrammingLauguage: parseProgrammingLauguageCreator :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
- Faker.Provider.ProgrammingLauguage: parseProgrammingLauguageField :: (FromJSON a, Monoid a) => FakerSettings -> Text -> Value -> Parser a
- Faker.Provider.ProgrammingLauguage: parseProgrammingLauguageFields :: (FromJSON a, Monoid a) => FakerSettings -> [Text] -> Value -> Parser a
- Faker.Provider.ProgrammingLauguage: parseProgrammingLauguageName :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
- Faker.Provider.ProgrammingLauguage: programmingLauguageCreatorProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
- Faker.Provider.ProgrammingLauguage: programmingLauguageNameProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
- Faker.Provider.Space: parseSpaceLaunchVehicule :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
- Faker.Provider.Space: spaceLaunchVehiculeProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
- Faker.Provider.StrangerThings: parseStrangerThingsCharacters :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
- Faker.Provider.StrangerThings: strangerThingsCharactersProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
- Faker.Space: launchVehicule :: Fake Text
- Faker.TH: lowerTitle :: String -> String
- Faker.TH: stringTitle :: String -> String
- Faker.TvShow.StrangerThings: characters :: Fake Text
+ Config: fetchDataSingle :: (MonadThrow m, MonadIO m) => FakerSettings -> SourceData -> (FakerSettings -> Value -> Parser Text) -> m (Vector Text)
+ Faker: getCacheField :: FakerSettings -> IO (HashMap CacheFieldKey (Vector Text))
+ Faker: getCacheFile :: FakerSettings -> IO (HashMap CacheFileKey Value)
+ Faker: instance GHC.Show.Show Faker.FakerGen
+ Faker: replaceCacheField :: HashMap CacheFieldKey (Vector Text) -> FakerSettings -> IO FakerSettings
+ Faker: replaceCacheFile :: HashMap CacheFileKey Value -> FakerSettings -> IO FakerSettings
+ Faker: setCacheField :: HashMap CacheFieldKey (Vector Text) -> FakerSettings -> IO ()
+ Faker: setCacheFile :: HashMap CacheFileKey Value -> FakerSettings -> IO ()
+ Faker.Appliance: equipment :: Fake Text
+ Faker.Artist: names :: Fake Text
+ Faker.Cannabis: brands :: Fake Text
+ Faker.Game.Dota: earthSpiritQuote :: Fake Text
+ Faker.Internal: cachedRandomUnresolvedVec :: (MonadThrow m, MonadIO m) => Text -> Text -> (FakerSettings -> m (Unresolved (Vector Text))) -> (FakerSettings -> Text -> m Text) -> FakerSettings -> m Text
+ Faker.Internal: cachedRandomUnresolvedVecWithoutVector :: (MonadThrow m, MonadIO m) => Text -> Text -> (FakerSettings -> m (Unresolved Text)) -> (FakerSettings -> Text -> m Text) -> FakerSettings -> m Text
+ Faker.Internal: cachedRandomVec :: (MonadThrow m, MonadIO m) => Text -> Text -> (FakerSettings -> m (Vector Text)) -> FakerSettings -> m Text
+ Faker.Internal: insertToCache :: Text -> Text -> FakerSettings -> Vector Text -> IO ()
+ Faker.Internal: modifyRandomGen :: FakerSettings -> Word64 -> FakerSettings
+ Faker.Internal: presentInCache :: Text -> Text -> FakerSettings -> IO (Maybe (Vector Text))
+ Faker.Internal.Types: ATHF :: SourceData
+ Faker.Internal.Types: Address :: SourceData
+ Faker.Internal.Types: Ancient :: SourceData
+ Faker.Internal.Types: Animal :: SourceData
+ Faker.Internal.Types: App :: SourceData
+ Faker.Internal.Types: Appliance :: SourceData
+ Faker.Internal.Types: Artist :: SourceData
+ Faker.Internal.Types: BTTF :: SourceData
+ Faker.Internal.Types: Bank :: SourceData
+ Faker.Internal.Types: Basketball :: SourceData
+ Faker.Internal.Types: Beer :: SourceData
+ Faker.Internal.Types: BoJackHorseman :: SourceData
+ Faker.Internal.Types: Book :: SourceData
+ Faker.Internal.Types: BossaNova :: SourceData
+ Faker.Internal.Types: BreakingBad :: SourceData
+ Faker.Internal.Types: Buffy :: SourceData
+ Faker.Internal.Types: Business :: SourceData
+ Faker.Internal.Types: CacheFieldKey :: !Text -> !Text -> !Text -> CacheFieldKey
+ Faker.Internal.Types: CacheFileKey :: !SourceData -> !Text -> CacheFileKey
+ Faker.Internal.Types: Cannabis :: SourceData
+ Faker.Internal.Types: Cat :: SourceData
+ Faker.Internal.Types: ChuckNorris :: SourceData
+ Faker.Internal.Types: Code :: SourceData
+ Faker.Internal.Types: Coffee :: SourceData
+ Faker.Internal.Types: Coin :: SourceData
+ Faker.Internal.Types: Color :: SourceData
+ Faker.Internal.Types: Commerce :: SourceData
+ Faker.Internal.Types: Community :: SourceData
+ Faker.Internal.Types: Company :: SourceData
+ Faker.Internal.Types: Compass :: SourceData
+ Faker.Internal.Types: Construction :: SourceData
+ Faker.Internal.Types: Cosmere :: SourceData
+ Faker.Internal.Types: CryptoCoin :: SourceData
+ Faker.Internal.Types: CultureSeries :: SourceData
+ Faker.Internal.Types: Currency :: SourceData
+ Faker.Internal.Types: CustomSourceEnglish :: String -> SourceData
+ Faker.Internal.Types: DcComics :: SourceData
+ Faker.Internal.Types: Demographic :: SourceData
+ Faker.Internal.Types: Dessert :: SourceData
+ Faker.Internal.Types: Device :: SourceData
+ Faker.Internal.Types: Dog :: SourceData
+ Faker.Internal.Types: Dota :: SourceData
+ Faker.Internal.Types: DrWho :: SourceData
+ Faker.Internal.Types: DragonBall :: SourceData
+ Faker.Internal.Types: DumbAndDumber :: SourceData
+ Faker.Internal.Types: Dune :: SourceData
+ Faker.Internal.Types: Educator :: SourceData
+ Faker.Internal.Types: ElderScrolls :: SourceData
+ Faker.Internal.Types: ElectricalComponents :: SourceData
+ Faker.Internal.Types: Esport :: SourceData
+ Faker.Internal.Types: Fallout :: SourceData
+ Faker.Internal.Types: FamilyGuy :: SourceData
+ Faker.Internal.Types: File :: SourceData
+ Faker.Internal.Types: Finance :: SourceData
+ Faker.Internal.Types: Food :: SourceData
+ Faker.Internal.Types: Football :: SourceData
+ Faker.Internal.Types: FreshPrinceOfBelAir :: SourceData
+ Faker.Internal.Types: Friends :: SourceData
+ Faker.Internal.Types: FunnyName :: SourceData
+ Faker.Internal.Types: GameOfThrones :: SourceData
+ Faker.Internal.Types: Gender :: SourceData
+ Faker.Internal.Types: GhostBusters :: SourceData
+ Faker.Internal.Types: GratefulDead :: SourceData
+ Faker.Internal.Types: GreekPhilosophers :: SourceData
+ Faker.Internal.Types: Hacker :: SourceData
+ Faker.Internal.Types: HalfLife :: SourceData
+ Faker.Internal.Types: HarryPotter :: SourceData
+ Faker.Internal.Types: Heroes :: SourceData
+ Faker.Internal.Types: HeroesOfTheStorm :: SourceData
+ Faker.Internal.Types: HeyArnold :: SourceData
+ Faker.Internal.Types: Hipster :: SourceData
+ Faker.Internal.Types: HitchhikersGuideToTheGalaxy :: SourceData
+ Faker.Internal.Types: Hobbit :: SourceData
+ Faker.Internal.Types: Horse :: SourceData
+ Faker.Internal.Types: House :: SourceData
+ Faker.Internal.Types: HowIMetYourMother :: SourceData
+ Faker.Internal.Types: IdNumber :: SourceData
+ Faker.Internal.Types: IndustrySegments :: SourceData
+ Faker.Internal.Types: Internet :: SourceData
+ Faker.Internal.Types: Invoice :: SourceData
+ Faker.Internal.Types: Job :: SourceData
+ Faker.Internal.Types: Kpop :: SourceData
+ Faker.Internal.Types: LeagueOfLegends :: SourceData
+ Faker.Internal.Types: Lebowski :: SourceData
+ Faker.Internal.Types: LordOfTheRings :: SourceData
+ Faker.Internal.Types: Lorem :: SourceData
+ Faker.Internal.Types: LoveCraft :: SourceData
+ Faker.Internal.Types: Markdown :: SourceData
+ Faker.Internal.Types: Marketing :: SourceData
+ Faker.Internal.Types: Measurement :: SourceData
+ Faker.Internal.Types: MichaelScott :: SourceData
+ Faker.Internal.Types: Military :: SourceData
+ Faker.Internal.Types: Movie :: SourceData
+ Faker.Internal.Types: Music :: SourceData
+ Faker.Internal.Types: Myst :: SourceData
+ Faker.Internal.Types: Name :: SourceData
+ Faker.Internal.Types: Nation :: SourceData
+ Faker.Internal.Types: NatoPhoneticAlphabet :: SourceData
+ Faker.Internal.Types: NewGirl :: SourceData
+ Faker.Internal.Types: OnePiece :: SourceData
+ Faker.Internal.Types: Opera :: SourceData
+ Faker.Internal.Types: OverWatch :: SourceData
+ Faker.Internal.Types: ParksAndRec :: SourceData
+ Faker.Internal.Types: Phish :: SourceData
+ Faker.Internal.Types: PhoneNumber :: SourceData
+ Faker.Internal.Types: Pokemon :: SourceData
+ Faker.Internal.Types: PrincessBride :: SourceData
+ Faker.Internal.Types: ProgrammingLanguage :: SourceData
+ Faker.Internal.Types: Quote :: SourceData
+ Faker.Internal.Types: Relationship :: SourceData
+ Faker.Internal.Types: Restaurant :: SourceData
+ Faker.Internal.Types: RickAndMorty :: SourceData
+ Faker.Internal.Types: RockBand :: SourceData
+ Faker.Internal.Types: Rupaul :: SourceData
+ Faker.Internal.Types: Science :: SourceData
+ Faker.Internal.Types: Seinfeld :: SourceData
+ Faker.Internal.Types: Shakespeare :: SourceData
+ Faker.Internal.Types: SiliconValley :: SourceData
+ Faker.Internal.Types: Simpsons :: SourceData
+ Faker.Internal.Types: SlackEmoji :: SourceData
+ Faker.Internal.Types: SonicTheHedgehog :: SourceData
+ Faker.Internal.Types: Source :: SourceData
+ Faker.Internal.Types: SouthPark :: SourceData
+ Faker.Internal.Types: Space :: SourceData
+ Faker.Internal.Types: StarGate :: SourceData
+ Faker.Internal.Types: StarTrek :: SourceData
+ Faker.Internal.Types: StarWars :: SourceData
+ Faker.Internal.Types: StrangerThings :: SourceData
+ Faker.Internal.Types: Stripe :: SourceData
+ Faker.Internal.Types: Subscription :: SourceData
+ Faker.Internal.Types: SuperHero :: SourceData
+ Faker.Internal.Types: SuperSmashBros :: SourceData
+ Faker.Internal.Types: SwordArtOnline :: SourceData
+ Faker.Internal.Types: Team :: SourceData
+ Faker.Internal.Types: TheExpanse :: SourceData
+ Faker.Internal.Types: TheItCrowd :: SourceData
+ Faker.Internal.Types: TheThickOfIt :: SourceData
+ Faker.Internal.Types: TwinPeaks :: SourceData
+ Faker.Internal.Types: UmphreysMcgee :: SourceData
+ Faker.Internal.Types: University :: SourceData
+ Faker.Internal.Types: VForVendetta :: SourceData
+ Faker.Internal.Types: Vehicle :: SourceData
+ Faker.Internal.Types: VentureBros :: SourceData
+ Faker.Internal.Types: Verbs :: SourceData
+ Faker.Internal.Types: Witcher :: SourceData
+ Faker.Internal.Types: WorldCup :: SourceData
+ Faker.Internal.Types: WorldOfWarcraft :: SourceData
+ Faker.Internal.Types: Yoda :: SourceData
+ Faker.Internal.Types: Zelda :: SourceData
+ Faker.Internal.Types: [cfkLocale] :: CacheFileKey -> !Text
+ Faker.Internal.Types: [cfkSource] :: CacheFileKey -> !SourceData
+ Faker.Internal.Types: [ckField] :: CacheFieldKey -> !Text
+ Faker.Internal.Types: [ckLocale] :: CacheFieldKey -> !Text
+ Faker.Internal.Types: [ckSource] :: CacheFieldKey -> !Text
+ Faker.Internal.Types: data CacheFieldKey
+ Faker.Internal.Types: data CacheFileKey
+ Faker.Internal.Types: data SourceData
+ Faker.Internal.Types: instance Data.Hashable.Class.Hashable Faker.Internal.Types.CacheFieldKey
+ Faker.Internal.Types: instance Data.Hashable.Class.Hashable Faker.Internal.Types.CacheFileKey
+ Faker.Internal.Types: instance Data.Hashable.Class.Hashable Faker.Internal.Types.SourceData
+ Faker.Internal.Types: instance GHC.Classes.Eq Faker.Internal.Types.CacheFieldKey
+ Faker.Internal.Types: instance GHC.Classes.Eq Faker.Internal.Types.CacheFileKey
+ Faker.Internal.Types: instance GHC.Classes.Eq Faker.Internal.Types.SourceData
+ Faker.Internal.Types: instance GHC.Classes.Ord Faker.Internal.Types.CacheFieldKey
+ Faker.Internal.Types: instance GHC.Classes.Ord Faker.Internal.Types.CacheFileKey
+ Faker.Internal.Types: instance GHC.Classes.Ord Faker.Internal.Types.SourceData
+ Faker.Internal.Types: instance GHC.Generics.Generic Faker.Internal.Types.CacheFieldKey
+ Faker.Internal.Types: instance GHC.Generics.Generic Faker.Internal.Types.CacheFileKey
+ Faker.Internal.Types: instance GHC.Generics.Generic Faker.Internal.Types.SourceData
+ Faker.Internal.Types: instance GHC.Show.Show Faker.Internal.Types.CacheFieldKey
+ Faker.Internal.Types: instance GHC.Show.Show Faker.Internal.Types.CacheFileKey
+ Faker.Internal.Types: instance GHC.Show.Show Faker.Internal.Types.SourceData
+ Faker.Movie.BackToTheFuture: characters :: Fake Text
+ Faker.Movie.BackToTheFuture: dates :: Fake Text
+ Faker.Movie.BackToTheFuture: quotes :: Fake Text
+ Faker.Name: firstName :: Fake Text
+ Faker.Name: lastName :: Fake Text
+ Faker.ProgrammingLanguage: creator :: Fake Text
+ Faker.ProgrammingLanguage: name :: Fake Text
+ Faker.Provider.Address: addressCityPrefixProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
+ Faker.Provider.Address: addressCommunityProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved (Vector Text))
+ Faker.Provider.Address: countryProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
+ Faker.Provider.Animal: animalNameProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
+ Faker.Provider.Artist: artistNamesProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
+ Faker.Provider.BackToTheFuture: backToTheFutureCharactersProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
+ Faker.Provider.BackToTheFuture: backToTheFutureDatesProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
+ Faker.Provider.BackToTheFuture: backToTheFutureQuotesProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
+ Faker.Provider.BackToTheFuture: parseBackToTheFuture :: FromJSON a => FakerSettings -> Value -> Parser a
+ Faker.Provider.BackToTheFuture: parseBackToTheFutureCharacters :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
+ Faker.Provider.BackToTheFuture: parseBackToTheFutureDates :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
+ Faker.Provider.BackToTheFuture: parseBackToTheFutureField :: (FromJSON a, Monoid a) => FakerSettings -> Text -> Value -> Parser a
+ Faker.Provider.BackToTheFuture: parseBackToTheFutureFields :: (FromJSON a, Monoid a) => FakerSettings -> [Text] -> Value -> Parser a
+ Faker.Provider.BackToTheFuture: parseBackToTheFutureQuotes :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
+ Faker.Provider.Bank: bankSwiftBicProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
+ Faker.Provider.Cannabis: cannabisBrandsProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
+ Faker.Provider.Cannabis: parseCannabisBrands :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
+ Faker.Provider.Coffee: parseCoffeeBlendName :: FakerSettings -> Value -> Parser (Unresolved Text)
+ Faker.Provider.Dota: dotaEarthSpiritQuoteProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
+ Faker.Provider.Dota: parseDotaEarthSpiritQuote :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
+ Faker.Provider.Name: nameFemaleFirstNameProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
+ Faker.Provider.Name: nameFirstNameProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved (Vector Text))
+ Faker.Provider.Name: nameLastNameProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
+ Faker.Provider.Name: nameMaleFirstNameProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
+ Faker.Provider.Name: nameNameProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved (Vector Text))
+ Faker.Provider.Name: nameNameWithMiddleProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved (Vector Text))
+ Faker.Provider.Name: namePrefixProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
+ Faker.Provider.Name: nameSuffixProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
+ Faker.Provider.Name: parseNameFemaleFirstName :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
+ Faker.Provider.Name: parseNameFields :: (FromJSON a, Monoid a) => FakerSettings -> [Text] -> Value -> Parser a
+ Faker.Provider.Name: parseNameFirstNameUnresolved :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser (Unresolved a)
+ Faker.Provider.Name: parseNameLastName :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
+ Faker.Provider.Name: parseNameMaleFirstName :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
+ Faker.Provider.Name: parseNameNameUnresolved :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser (Unresolved a)
+ Faker.Provider.Name: parseNameNameWithMiddleUnresolved :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser (Unresolved a)
+ Faker.Provider.Name: parseNamePrefix :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
+ Faker.Provider.Name: parseNameSuffix :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
+ Faker.Provider.ProgrammingLanguage: parseProgrammingLauguage :: FromJSON a => FakerSettings -> Value -> Parser a
+ Faker.Provider.ProgrammingLanguage: parseProgrammingLauguageCreator :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
+ Faker.Provider.ProgrammingLanguage: parseProgrammingLauguageField :: (FromJSON a, Monoid a) => FakerSettings -> Text -> Value -> Parser a
+ Faker.Provider.ProgrammingLanguage: parseProgrammingLauguageFields :: (FromJSON a, Monoid a) => FakerSettings -> [Text] -> Value -> Parser a
+ Faker.Provider.ProgrammingLanguage: parseProgrammingLauguageName :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
+ Faker.Provider.ProgrammingLanguage: programmingLauguageCreatorProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
+ Faker.Provider.ProgrammingLanguage: programmingLauguageNameProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
+ Faker.Provider.Space: parseSpaceLaunchVehicle :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
+ Faker.Provider.Space: spaceLaunchVehicleProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
+ Faker.Provider.StrangerThings: parseStrangerThingsCharacter :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
+ Faker.Provider.StrangerThings: strangerThingsCharacterProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
+ Faker.Provider.TH: genProvidersSingle :: Text -> [Text] -> Q [Dec]
+ Faker.Space: launchVehicle :: Fake Text
+ Faker.TvShow.StrangerThings: character :: Fake Text
- Faker.Internal: resolver :: (MonadThrow m, MonadIO m) => (FakerSettings -> m (Vector Text)) -> FakerSettings -> m Text
+ Faker.Internal: resolver :: (MonadThrow m, MonadIO m) => (FakerSettings -> m (Vector a)) -> FakerSettings -> m a
- Faker.Provider.Coffee: coffeeBlendNameProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved (Vector Text))
+ Faker.Provider.Coffee: coffeeBlendNameProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved Text)
- Faker.Provider.Coffee: coffeeNotesProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
+ Faker.Provider.Coffee: coffeeNotesProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved Text)
- Faker.Provider.Coffee: parseCoffeeNotes :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a
+ Faker.Provider.Coffee: parseCoffeeNotes :: FakerSettings -> Value -> Parser (Unresolved Text)
- Faker.Provider.Name: resolveNameText :: (MonadIO m, MonadThrow m) => FakerSettings -> Text -> m Text
+ Faker.Provider.Name: resolveNameText :: (MonadThrow m, MonadIO m) => FakerSettings -> Text -> m Text
- Faker.Provider.Vehicle: vehicleDoorsProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
+ Faker.Provider.Vehicle: vehicleDoorsProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Int)
- Faker.Provider.Vehicle: vehicleEngineSizesProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)
+ Faker.Provider.Vehicle: vehicleEngineSizesProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Int)
- Faker.Vehicle: doors :: Fake Text
+ Faker.Vehicle: doors :: Fake Int
- Faker.Vehicle: engineSizes :: Fake Text
+ Faker.Vehicle: engineSizes :: Fake Int

Files

ChangeLog.md view
@@ -1,5 +1,12 @@ # Changelog for fakedata +## 0.3.0++* Update fake data source+* Improve performance and add test coverage+* Fix various bugs+* Add `brands` function to the module Faker.Cannabis+ ## 0.2.2  * Add meepoQuote function to the module Faker.Game.Dota
+ bench/main.hs view
@@ -0,0 +1,52 @@+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE DeriveAnyClass #-}+{-# LANGUAGE DeriveGeneric #-}++import Control.DeepSeq+import Data.Text (Text)+import Faker+import Faker.Address (country, fullAddress)+import Faker.Ancient (god)+import Faker.Combinators (listOf)+import Faker.Name (name)+import Faker.TvShow.SiliconValley (email)+import GHC.Generics+import Gauge++data Person =+  Person+    { personName :: Text+    , personAddress :: Text+    , personEmail :: Text+    , personCountry :: Text+    }+  deriving (Show, Eq, NFData, Generic)++fakePerson :: Fake Person+fakePerson = do+  personName <- name+  personAddress <- fullAddress+  personCountry <- country+  personEmail <- email+  pure $ Person {..}++main :: IO ()+main = defaultMain benchs+  where+    benchs =+      [ bgroup+          "God benchmark"+          [ bench "single god" $ nfIO (generate singleGod)+          , bench "thousand gods" $ nfIO (generate thousandGod)+          ]+      , bgroup+          "Person benchmark"+          [ bench "single person" $ nfIO (generate fakePerson)+          , bench "10 persons" $ nfIO (generate $ listOf 10 fakePerson)+          ]+      ]+      where+        singleGod :: Fake Text+        singleGod = god+        thousandGod :: Fake [Text]+        thousandGod = listOf 1000 god
fakedata.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: db840200e64e299010e5ca775abc4989422cf870d1b80c2af719438366539672+-- hash: be5c05f79b0f39b9b500b1e935b69e331f6bb4f7120972b17688182b7d098a8a  name:           fakedata-version:        0.2.2+version:        0.3.0 synopsis:       Library for producing fake data description:    Please see the README on GitHub at <https://github.com/psibi/fakedata#readme> category:       Random, Fake, FakeData@@ -274,7 +274,6 @@       Faker.File       Faker.Finance       Faker.Food-      Faker.Football       Faker.FunnyName       Faker.Game.Dota       Faker.Game.ElderScrolls@@ -297,6 +296,7 @@       Faker.House       Faker.IndustrySegments       Faker.Internal+      Faker.Internal.Types       Faker.Internet       Faker.JapaneseMedia.DragonBall       Faker.JapaneseMedia.OnePiece@@ -330,7 +330,7 @@       Faker.Nation       Faker.NatoPhoneticAlphabet       Faker.PhoneNumber-      Faker.ProgrammingLauguage+      Faker.ProgrammingLanguage       Faker.Provider.Address       Faker.Provider.Ancient       Faker.Provider.Animal@@ -433,7 +433,7 @@       Faker.Provider.PhoneNumber       Faker.Provider.Pokemon       Faker.Provider.PrincessBride-      Faker.Provider.ProgrammingLauguage+      Faker.Provider.ProgrammingLanguage       Faker.Provider.Quote       Faker.Provider.Relationship       Faker.Provider.Restaurant@@ -535,10 +535,12 @@     , directory     , exceptions     , filepath+    , hashable     , random     , template-haskell     , text     , time+    , unordered-containers     , vector     , yaml   default-language: Haskell2010@@ -561,6 +563,8 @@       OperaSpec       OtherSpec       ProviderSpec+      TestImport+      TextSpec       Paths_fakedata   hs-source-dirs:       test@@ -573,12 +577,42 @@     , exceptions     , fakedata     , filepath+    , hashable     , hspec     , hspec-discover     , random     , template-haskell     , text     , time+    , unordered-containers+    , vector+    , yaml+  default-language: Haskell2010++benchmark fakebench+  type: exitcode-stdio-1.0+  main-is: main.hs+  other-modules:+      Paths_fakedata+  hs-source-dirs:+      bench+  ghc-options: -O2+  build-depends:+      base >=4.7 && <5+    , bytestring+    , containers+    , deepseq+    , directory+    , exceptions+    , fakedata+    , filepath+    , gauge+    , hashable+    , random+    , template-haskell+    , text+    , time+    , unordered-containers     , vector     , yaml   default-language: Haskell2010
faker/lib/locales/en-CA.yml view
@@ -1,7 +1,7 @@ en-CA:   faker:     address:-      postcode: /[A-CEJ-NPR-TVXY][0-9][A-CEJ-NPR-TV-Z] ?[0-9][A-CEJ-NPR-TV-Z][0-9]/+      postcode: /[A-CEGHJ-NPR-TVXY][0-9][A-CEJ-NPR-TV-Z] ?[0-9][A-CEJ-NPR-TV-Z][0-9]/       state: [Alberta, British Columbia, Manitoba, New Brunswick, Newfoundland and Labrador, Nova Scotia, Northwest Territories, Nunavut, Ontario, Prince Edward Island, Quebec, Saskatchewan, Yukon]       state_abbr: ["AB", "BC", "MB", "NB", "NL", "NS", "NU", "NT", "ON", "PE", "QC", "SK", "YT"]       default_country: [Canada]
faker/lib/locales/en-IND.yml view
@@ -10,7 +10,7 @@         - "#{first_name} #{last_name} #{last_name}"     address:       postcode: ['######']-      city: [Bengaluru, Chennai, Hyderabad, Kolkata, Mumbai, New Delhi, Thiruvananthapuram, Visakhapatnam]+      city: [Adoni, Agartala, Agra, Ahmedabad, Ahmednagar, Aizawl, Ajmer, Akola, Alappuzha, Aligarh, Allahabad, Alwar, Amaravati, Ambala, Ambarnath, Ambattur, Amravati, Amritsar, Amroha, Anand, Anantapur, Arrah, Asansol, Aurangabad, Aurangabad, Avadi, Bahraich, Bally, Bangalore, Baranagar, Barasat, Bardhaman, Bareilly, Bathinda, Begusarai, Belgaum, Bellary, Berhampore, Berhampur, Bettiah, Bhagalpur, Bhalswa Jahangir Pur, Bharatpur, Bhatpara, Bhavnagar, Bhilai, Bhilwara, Bhimavaram, Bhind, Bhiwandi, Bhiwani, Bhopal, Bhubaneswar, Bhusawal, Bidar, Bidhannagar, Bihar Sharif, Bijapur, Bikaner, Bilaspur, Bokaro, Bulandshahr, Burhanpur, Buxar, Chandigarh, Chandrapur, Chapra, Chennai, Chinsurah, Chittoor, Coimbatore, Cuttack, Danapur, Darbhanga, Davanagere, Dehradun, Dehri, Delhi, Deoghar, Dewas, Dhanbad, Dharmavaram, Dhule, Dindigul, Durg, Durgapur, Eluru, Erode, Etawah, Faridabad, Farrukhabad, Fatehpur, Firozabad, Gandhidham, Gandhinagar, Gangtok, Gaya, Ghaziabad, Gopalpur, Gorakhpur, Gudivada, Gulbarga, Guna, Guntakal, Guntur, Gurgaon, Guwahati, Gwalior, Hajipur, Haldia, Hapur, Haridwar, Hindupur, Hospet, Howrah, Hubli–Dharwad, Hyderabad, Ichalkaranji, Imphal, Indore, Jabalpur, Jaipur, Jalandhar, Jalgaon, Jalna, Jamalpur, Jammu, Jamnagar, Jamshedpur, Jaunpur, Jehanabad, Jhansi, Jodhpur, Junagadh, Kadapa, Kakinada, Kalyan-Dombivli, Kamarhati, Kanpur, Karaikudi, Karawal Nagar, Karimnagar, Karnal, Katihar, Katni, Kavali, Khammam, Khandwa, Kharagpur, Kirari Suleman Nagar, Kishanganj, Kochi, Kolhapur, Kolkata, Kollam, Korba, Kota, Kottayam, Kozhikode, Kulti, Kumbakonam, Kurnool, Latur, Loni, Lucknow, Ludhiana, Machilipatnam, Madanapalle, Madhyamgram, Madurai, Mahaboobnagar, Maheshtala, Malda, Malegaon, Mangalore, Mango, Mathura, Mau, Meerut, Mehsana, Mira-Bhayandar, Miryalaguda, Mirzapur, Morbi, Morena, Motihari, Mumbai, Munger, Muzaffarnagar, Muzaffarpur, Mysore, Nadiad, Nagercoil, Nagpur, Naihati, Nanded, Nandyal, Nangloi Jat, Narasaraopet, Nashik, Navi Mumbai, Nellore, New Delhi, Nizamabad, Noida, North Dumdum, Ongole, Orai, Ozhukarai, Pali, Pallavaram, Panchkula, Panihati, Panipat, Panvel, Parbhani, Patiala, Patna, Phagwara, Pimpri-Chinchwad, Pondicherry, Proddatur, Pune, Purnia, Raebareli, Raichur, Raiganj, Raipur, Rajahmundry, Rajkot, Rajpur Sonarpur, Ramagundam, Rampur, Ranchi, Ratlam, Raurkela Industrial Township, Rewa, Rohtak, Rourkela, Sagar, Saharanpur, Saharsa, Salem, Sambalpur, Sambhal, Sangli-Miraj & Kupwad, Sasaram, Satara, Satna, Secunderabad, Serampore, Shahjahanpur, Shimla, Shimoga, Shivpuri, Sikar, Siliguri, Singrauli, Sirsa, Siwan, Solapur, Sonipat, South Dumdum, Sri Ganganagar, Srikakulam, Srinagar, Sultan Pur Majra, Surat, Surendranagar Dudhrej, Suryapet, Tadepalligudem, Tadipatri, Tenali, Thane, Thanjavur, Thiruvananthapuram, Thoothukudi, Thrissur, Tiruchirappalli, Tirunelveli, Tirupati, Tiruppur, Tiruvottiyur, Tumkur, Udaipur, Udupi, Ujjain, Ulhasnagar, Uluberia, Unnao, Vadodara, Varanasi, Vasai-Virar, Vellore, Vijayanagaram, Vijayawada, Visakhapatnam, Warangal, Yamunanagar]       state: [Andhra Pradesh, Arunachal Pradesh, Assam, Bihar, Chhattisgarh, Goa, Gujarat, Haryana, Himachal Pradesh, Jammu and Kashmir, Jharkhand, Karnataka, Kerala, Madya Pradesh, Maharashtra, Manipur, Meghalaya, Mizoram, Nagaland, Orissa, Punjab, Rajasthan, Sikkim, Tamil Nadu, Tripura, Uttaranchal, Uttar Pradesh, West Bengal, Andaman and Nicobar Islands, Chandigarh, Dadar and Nagar Haveli, Daman and Diu, Delhi, Lakshadweep, Pondicherry]       state_abbr: [AP, AR, AS, BR, CG, DL, GA, GJ, HR, HP, JK, JS, KA, KL, MP, MH, MN, ML, MZ, NL, OR, PB, RJ, SK, TN, TR, UK, UP, WB, AN, CH, DN, DD, LD, PY]       default_country: [India, Indian Republic, Bharat, Hindustan]
faker/lib/locales/en.yml view
@@ -2,6 +2,9 @@   time:     formats:       us: "%m/%d/%Y %I:%M %p"+      default: '%a, %d %b %Y %H:%M:%S %z'+      long: '%B %d, %Y %H:%M'+      short: '%d %b %H:%M'     am: "AM"     pm: "PM"   faker:
faker/lib/locales/en/address.yml view
@@ -257,7 +257,7 @@         YE: "Yemen"         ZM: "Zambia"         ZW: "Zimbabwe"-      country_by_name: +      country_by_name:         afghanistan: "AF"         albania: "AB"         algeria: "DZ"@@ -397,7 +397,6 @@         mauritania: "MR"         mauritius: "MU"         mayotte: "YT"-        mexicoMX: ""         micronesia_federated_states_of: "FM"         moldova_republic_of: "MD"         monaco: "MC"@@ -580,5 +579,3 @@         - "#{street_address}, #{city}, #{state_abbr} #{zip_code}"         - "#{secondary_address} #{street_address}, #{city}, #{state_abbr} #{zip_code}"       default_country: [United States of America]--
faker/lib/locales/en/animal.yml view
@@ -2,5 +2,5 @@   faker:     creature:       animal:-        name: ["alligator", "crocodile", "alpaca", "ant", "antelope", "ape", "armadillo", "donkey", "baboon", "badger", "bat", "bear", "beaver", "bee", "beetle", "buffalo", "butterfly", "camel", "water buffalo", "caribou", "cat", "cattle", "cheetah", "chimpanzee", "chinchilla", "cicada", "clam", "cockroach", "cod", "coyote", "crab", "cricket", "crow",  "raven", "deer", "dinosaur", "dog", "dolphin", "porpoise", "duck", "eagle", "eel", "elephant", "elk", "ferret", "fish", "fly", "fox", "frog", "toad", "gerbil", "giraffe", "gnat", "gnu", "wildebeest", "goat", "goldfish", "goose", "gorilla", "grasshopper", "guinea pig", "hamster", "hare", "hedgehog", "herring", "hippopotamus", "hornet", "horse", "hound", "hyena", "impala", "jackal", "jellyfish", "kangaroo", "wallaby", "koala", "leopard", "lion", "lizard", "llama", "locust", "louse", "macaw", "mallard", "mammoth", "manatee", "marten", "mink", "minnow", "mole", "monkey", "moose", "mosquito", "mouse", "rat", "mule", "muskrat", "otter", "ox", "oyster", "panda", "pig", "platypus", "porcupine", "prairie dog", "pug", "rabbit", "raccoon", "reindeer", "rhinoceros", "salmon", "sardine", "scorpion", "seal ", "sea lion", "serval", "shark", "sheep", "skunk", "snail", "snake", "spider", "squirrel", "swan", "termite", "tiger", "trout", "turtle ", "tortoise", "walrus", "wasp", "weasel", "whale", "wolf", "wombat", "woodchuck", "worm", "yak", "yellowjacket", "zebra"]-        +        name: ["alligator", "crocodile", "alpaca", "ant", "antelope", "ape", "armadillo", "donkey", "baboon", "badger", "bat", "bear", "beaver", "bee", "beetle", "buffalo", "butterfly", "camel", "water buffalo", "caribou", "cat", "cattle", "cheetah", "chimpanzee", "chinchilla", "cicada", "clam", "cockroach", "cod", "coyote", "crab", "cricket", "crow",  "raven", "deer", "dinosaur", "dog", "dolphin", "porpoise", "duck", "eagle", "eel", "elephant", "elk", "ferret", "fish", "fly", "fox", "frog", "toad", "gerbil", "giraffe", "gnat", "gnu", "wildebeest", "goat", "goldfish", "goose", "gorilla", "grasshopper", "guinea pig", "hamster", "hare", "hedgehog", "herring", "hippopotamus", "hornet", "horse", "hound", "hyena", "impala", "jackal", "jellyfish", "kangaroo", "wallaby", "koala", "leopard", "lion", "lizard", "llama", "locust", "louse", "macaw", "mallard", "mammoth", "manatee", "marten", "mink", "minnow", "mole", "monkey", "moose", "mosquito", "mouse", "rat", "mule", "muskrat", "otter", "ox", "oyster", "panda", "pig", "platypus", "porcupine", "prairie dog", "pug", "rabbit", "raccoon", "reindeer", "rhinoceros", "salmon", "sardine", "scorpion", "seal", "sea lion", "serval", "shark", "sheep", "skunk", "snail", "snake", "spider", "squirrel", "swan", "termite", "tiger", "trout", "turtle ", "tortoise", "walrus", "wasp", "weasel", "whale", "wolf", "wombat", "woodchuck", "worm", "yak", "yellowjacket", "zebra"]+
faker/lib/locales/en/cannabis.yml view
@@ -10,3 +10,4 @@       categories: ["capsules", "concentrates", "crumble", "crystalline", "distillate", "edibles", "flower", "ice hash", "live resin", "medical", "rosin", "seeds & clones", "shatter", "tinctures", "topicals", "vape pens"]       types: ["hybrid", "indica", "sativa"]       buzzwords: ["blunt wrap", "bong", "bottom shelf", "bubbler", "cashed", "cbd", "dank", "eighth", "gram", "high", "hydroponic", "keef", "marijuana", "mary jane", "munchies", "ounce", "papers", "pipe", "pound", "private reserve", "ripped", "spliff", "stoned", "terpene", "thc", "toke", "top shelf", "wake and bake", "weed"]+      brands: ["8 | FOLD Cultivation", "Apothecanna", "Auntie Dolores", "Big Pete's Treats", "Bloom Farms", "CI Wholesale", "California's Finest", "Cannapunch", "Cannavore Confections", "Caviar Gold", "Cheeba Chews", "Chong's Choice", "Claw", "Coda Signature", "Colorado Cannabis Company", "Dixie Edibles", "Dixie Elixirs", "Dosist", "Evolab", "Hashman Infused", "Hiku", "Jetty Extracts", "K.I.N.D. Concentrates", "Kiva Confections", "Leafs by Snoop", "Legal Drinks", "Level Blends", "Lola Lola", "Lord Jones", "Marley Natural", "Muy", "Nature’s Medicines", "Oil Stix", "Omaha Farms", "Orchid Essentials", "OreKron", "Roots", "Seven Point", "Shore Natural RX", "Siskiyou Sungrown", "Summit", "THC Design", "THC Factory", "The Goodship Company", "The Lab", "Timeless Vapes", "True Humboldt", "Wana Brands", "Whoopie & Maya", "Willie’s Reserve", "marQaha"]
faker/lib/locales/en/science.yml view
@@ -2,5 +2,5 @@   faker:     science:       element: ["Hydrogen", "Helium", "Lithium", "Beryllium", "Boron", "Carbon", "Nitrogen", "Oxygen", "Fluorine", "Neon", "Sodium", "Magnesium", "Aluminum", "Silicon", "Phosphorus", "Sulfur", "Chlorine", "Argon", "Potassium", "Calcium", "Scandium", "Titanium", "Vanadium", "Chromium", "Manganese", "Iron", "Cobalt", "Nickel", "Copper", "Zinc", "Gallium", "Germanium", "Arsenic", "Selenium", "Bromine", "Krypton", "Rubidium", "Strontium", "Yttrium", "Zirconium", "Niobium", "Molybdenum", "Technetium", "Ruthenium", "Rhodium", "Palladium", "Silver", "Cadmium", "Indium", "Tin", "Antimony", "Tellurium", "Iodine", "Xenon", "Cesium", "Barium", "Lanthanum", "Cerium", "Praseodymium", "Neodymium", "Promethium", "Samarium", "Europium", "Gadolinium", "Terbium", "Dysprosium", "Holmium", "Erbium", "Thulium", "Ytterbium", "Lutetium", "Hafnium", "Tantalum", "Tungsten", "Rhenium", "Osmium", "Iridium", "Platinum", "Gold", "Mercury", "Thallium", "Lead", "Bismuth", "Polonium", "Astatine", "Radon", "Francium", "Radium", "Actinium", "Thorium", "Protactinium", "Uranium", "Neptunium", "Plutonium", "Americium", "Curium", "Berkelium", "Californium", "Einsteinium", "Fermium", "Mendelevium", "Nobelium", "Lawrencium", "Rutherfordium", "Dubnium", "Seaborgium", "Bohrium", "Hassium", "Meitnerium", "Darmstadtium", "Roentgenium", "Copernicium", "Nihonium", "Flerovium", "Moscovium", "Livermorium", "Tennessine", "Oganesson"]-      element_symbol: [H, He, Li, Be, B, C, N, O, F, Ne, Na, Mg, Al, Si, P, S, Cl, Ar, K, Ca, Sc, Ti, V, Cr, Mn, Fe, Co, Ni, Cu, Zn, Ga, Ge, As, Se, Br, Kr, Rb, Sr, Y, Zr, Nb, Mo, Tc, Ru, Rh, Pd, Ag, Cd, In, Sn, Sb, Te, I, Xe, Cs, Ba, La, Ce, Pr, Nd, Pm, Sm, Eu, Gd, Tb, Dy, Ho, Er, Tm, Yb, Lu, Hf, Ta, W, Re, Os, Ir, Pt, Au, Hg, Tl, Pb, Bi, Po, At, Rn, Fr, Ra, Ac, Th, Pa, U, Np, Pu, Am, Cm, Bk, Cf, Es, Fm, Md, No, Lr, Rf, Db, Sg, Bh, Hs, Mt, Ds, Rg, Cn, Nh, Fl, Mc, Lv, Ts, Og]+      element_symbol: [H, He, Li, Be, B, C, "N", O, F, Ne, Na, Mg, Al, Si, P, S, Cl, Ar, K, Ca, Sc, Ti, V, Cr, Mn, Fe, Co, Ni, Cu, Zn, Ga, Ge, As, Se, Br, Kr, Rb, Sr, "Y", Zr, Nb, Mo, Tc, Ru, Rh, Pd, Ag, Cd, In, Sn, Sb, Te, I, Xe, Cs, Ba, La, Ce, Pr, Nd, Pm, Sm, Eu, Gd, Tb, Dy, Ho, Er, Tm, Yb, Lu, Hf, Ta, W, Re, Os, Ir, Pt, Au, Hg, Tl, Pb, Bi, Po, At, Rn, Fr, Ra, Ac, Th, Pa, U, Np, Pu, Am, Cm, Bk, Cf, Es, Fm, Md, "No", Lr, Rf, Db, Sg, Bh, Hs, Mt, Ds, Rg, Cn, Nh, Fl, Mc, Lv, Ts, Og]       scientist: ["Isaac Newton", "Albert Einstein", "Neils Bohr", "Charles Darwin", "Louis Pasteur", "Sigmund Freud", "Galileo Galilei", "Antoine Laurent Lavoisier", "Johannes Kepler", "Nicolaus Copernicus", "Michael Faraday", "James Clerk Maxwell", "Claude Bernard", "Franz Boas", "Werner Heisenberg", "Linus Pauling", "Rudolf Virchow", "Erwin Schrodinger", "Ernest Rutherford", "Paul Dirac", "Andreas Vesalius", "Tycho Brahe", "Comte de Buffon", "Ludwig Boltzmann", "Max Planck", "Marie Curie", "William Herschel", "Charles Lyell", "Pierre Simon de Laplace", "Edwin Hubble", "Joseph J. Thomson", "Max Born", "Francis Crick", "Enrico Fermi", "Leonard Euler", "Justus Liebig", "Arthur Eddington", "William Harvey", "Marcello Malpighi", "Christiaan Huygens", "Carl Gauss (Karl Friedrich Gauss)", "Albrecht von Haller", "August Kekule", "Robert Koch", "Murray Gell-Mann", "Emil Fischer", "Dmitri Mendeleev", "Sheldon Glashow", "James Watson", "John Bardeen", "John von Neumann", "Richard Feynman", "Alfred Wegener", "Stephen Hawking", "Anton van Leeuwenhoek", "Max von Laue", "Gustav Kirchhoff", "Hans Bethe", "Euclid", "Gregor Mendel", "Heike Kamerlingh Onnes", "Thomas Hunt Morgan", "Hermann von Helmholtz", "Paul Ehrlich", "Ernst Mayr", "Charles Sherrington", "Theodosius Dobzhansky", "Max Delbruck", "Jean Baptiste Lamarck", "William Bayliss", "Noam Chomsky", "Frederick Sanger", "Lucretius", "John Dalton", "Louis Victor de Broglie", "Carl Linnaeus", "Jean Piaget", "George Gaylord Simpson", "Claude Levi-Strauss", "Lynn Margulis", "Karl Landsteiner", "Konrad Lorenz", "Edward O. Wilson", "Frederick Gowland Hopkins", "Gertrude Belle Elion", "Hans Selye", "J. Robert Oppenheimer", "Edward Teller", "Willard Libby", "Ernst Haeckel", "Jonas Salk", "Emil Kraepelin", "Trofim Lysenko", "Francis Galton", "Alfred Binet", "Alfred Kinsey", "Alexander Fleming", "B. F. Skinner", "Wilhelm Wundt", "Archimedes"]
faker/lib/locales/en/space.yml view
@@ -14,4 +14,4 @@       company: ['Rocket Lab', SpaceX', 'Blue Origin', 'Virgin Galactic', 'SpaceDev', 'Bigelow Aerospace', 'Orbital Sciences', 'JPL', 'NASA Jet Propulsion Laboratory']       distance_measurement: ['light years', 'AU', 'parsecs', 'kiloparsecs', 'megaparsecs']       meteorite: ['Aarhus', 'Abee', 'Adelie Land', 'Adhi Kot', 'Adzhi-Bogdo', 'Santa Rosa de Viterbo', 'Agen', 'Akbarpur', 'Albareto', 'Allan Hills 84001', 'Allan Hills A81005', 'Allegan', 'Allende', 'Ambapur Nagla', 'Andura', 'Angers', 'Angra dos Reis', 'Ankober', 'Anlong', 'Annaheim', 'Appley Bridge', 'Arbol Solo', 'Archie', 'Arroyo Aguiar', 'Assisi', 'Atoka', 'Avanhandava', 'Bacubirito', 'Baszkówka','Beardsley', 'Bellsbank', 'Bench Crater', 'Benton', 'Białystok', 'Blithfield','Block Island', 'Bovedy', 'Brachina', 'Brahin', 'Brenham', 'Buzzard Coulee','Campo del Cielo', 'Canyon Diablo', 'Cape York', 'Carancas', 'Chambord','Chassigny', 'Chelyabinsk', 'Chergach', 'Chinga', 'Chinguetti', 'Claxton','Coahuila', 'Cranbourne', 'D''Orbigny', 'Dronino', 'Eagle Station', 'Elbogen','Ensisheim', 'Esquel', 'Fukang', 'Gancedo', 'Gao–Guenie', 'Gay Gulch', 'Gebel Kamil', 'Gibeon', 'Goose Lake', 'Grant', 'Hadley Rille', 'Heat Shield Rock','Hoba', 'Homestead', 'Hraschina', 'Huckitta', 'Imilac', 'Itqiy', 'Kaidun','Kainsaz', 'Karoonda', 'Kesen', 'Krasnojarsk', 'L''Aigle', 'Lac Dodon', 'Lake Murray', 'Loreto', 'Los Angeles', 'Łowicz', 'Mackinac Island', 'Mbozi','Middlesbrough', 'Millbillillie', 'Mineo', 'Monte Milone', 'Moss','Mundrabilla', 'Muonionalusta', 'Murchison', 'Nakhla', 'Nantan','Neuschwanstein', 'Northwest Africa 7034', 'Northwest Africa 7325', 'Norton County', 'Novato', 'Northwest Africa 3009', 'Oileán Ruaidh (Martian)', 'Old Woman', 'Oldenburg', 'Omolon', 'Orgueil', 'Ornans', 'Osseo', 'Österplana 065','Ourique', 'Pallasovka', 'Paragould', 'Park Forest', 'Pavlovka', 'Peace River','Peekskill', 'Penouille', 'Polonnaruwa', 'High Possil', 'Příbram', 'Pultusk','Qidong', 'Richardton', 'Santa Vitoria do Palmar', 'Sayh al Uhaymir 169','Seymchan', 'Shelter Island', 'Shergotty', 'Sikhote-Alin', 'Sołtmany','Springwater', 'St-Robert', 'Stannern', 'Sulagiri', 'Sutter''s Mill','Sylacauga', 'Tagish Lake', 'Tamdakht', 'Tenham', 'Texas Fireball', 'Tissint','Tlacotepec', 'Toluca', 'Treysa', 'Twannberg', 'Veliky Ustyug', 'Vermillion','Weston', 'Willamette', 'Winona', 'Wold Cottage', 'Yamato 000593','Yamato 691','Yamato 791197', 'Yardymly', 'Zagami', 'Zaisho', 'Zaklodzie']-      launch_vehicule: ['Antares', 'Ariane 5', 'Atlas', 'Diamant', 'Dnepr', 'Delta', 'Electron', 'Energia', 'Europa', 'Falcon 9', 'Falcon Heavy', 'GSLV', 'Juno', 'Long March', 'Mercury-Redstone', 'Minotaur', 'Pegasus', 'Proton', 'PSLV', 'Safir', 'Shavit', 'Saturn IV', 'Semiorka', 'Soyouz', 'Titan', 'Vega', 'Veronique', 'Zenit']+      launch_vehicle: ['Antares', 'Ariane 5', 'Atlas', 'Diamant', 'Dnepr', 'Delta', 'Electron', 'Energia', 'Europa', 'Falcon 9', 'Falcon Heavy', 'GSLV', 'Juno', 'Long March', 'Mercury-Redstone', 'Minotaur', 'Pegasus', 'Proton', 'PSLV', 'Safir', 'Shavit', 'Saturn IV', 'Semiorka', 'Soyouz', 'Titan', 'Vega', 'Veronique', 'Zenit']
faker/lib/locales/en/super_smash_bros.yml view
@@ -3,6 +3,7 @@     games:       super_smash_bros:         fighter:+          - Banjo-Kazooie           - Bayonetta           - Bowser           - Bowser Jr.@@ -22,6 +23,7 @@           - Fox           - Ganondorf           - Greninja+          - Hero           - Ice Climbers           - Ike           - Incineroar@@ -137,6 +139,7 @@           - Mario Bros.           - Mario Circuit           - Mario Galaxy+          - Mementos           - Midgar           - Miiverse           - Moray Towers@@ -178,6 +181,7 @@           - Skyworld           - Smashville           - Spear Pillar+          - Spiral Mountain           - Spirit Train           - Summit           - Super Happy Tree
faker/lib/locales/en/verbs.yml view
@@ -2,7 +2,7 @@   faker:     verbs:       base: ["abash", "abate", "abide", "absorb", "accept", "accompany", "ache", "achieve", "acquire", "act", "add", "address", "adjust", "admire", "admit", "advise", "afford", "agree", "alight", "allow", "animate", "announce", "answer", "apologize", "appear", "applaud", "apply", "approach", "approve", "argue", "arise", "arrange", "arrest", "ask", "assert", "assort", "astonish", "attack", "attend", "attract", "audit", "avoid", "awake", "bang", "banish", "bash", "bat", "be", "bear", "bear", "beat", "beautify", "become", "befall", "beg", "begin", "behave", "behold", "believe", "belong", "bend", "bereave", "beseech", "bet", "betray", "bid", "bid", "bind", "bite", "bleed", "bless", "blossom", "blow", "blur", "blush", "board", "boast", "boil", "bow", "box", "bray", "break", "breathe", "breed", "bring", "broadcast", "brush", "build", "burn", "burst", "bury", "bust", "buy", "buzz", "calculate", "call", "canvass", "capture", "caress", "carry", "carve", "cash", "cast", "catch", "cause", "cease", "celebrate", "challenge", "change", "charge", "chase", "chat", "check", "cheer", "chew", "chide", "chip", "choke", "choose", "classify", "clean", "cleave", "click", "climb", "cling", "close", "clothe", "clutch", "collapse", "collect", "colour", "come", "comment", "compare", "compel", "compete", "complain", "complete", "conclude", "conduct", "confess", "confine", "confiscate", "confuse", "congratulate", "connect", "connote", "conquer", "consecrate", "consent", "conserve", "consider", "consign", "consist", "console", "consort", "conspire", "constitute", "constrain", "construct", "construe", "consult", "contain", "contemn", "contend", "contest", "continue", "contract", "contradict", "contrast", "contribute", "contrive", "control", "convene", "converge", "converse", "convert", "convey", "convict", "convince", "coo", "cook", "cool", "co-operate", "cope", "copy", "correct", "correspond", "corrode", "corrupt", "cost", "cough", "counsel", "count", "course", "cover", "cower", "crack", "crackle", "crash", "crave", "create", "creep", "crib", "cross", "crowd", "crush", "cry", "curb", "cure", "curve", "cut", "cycle", "damage", "damp", "dance", "dare", "dash", "dazzle", "deal", "decay", "decide", "declare", "decorate", "decrease", "dedicate", "delay", "delete", "deny", "depend", "deprive", "derive", "describe", "desire", "destroy", "detach", "detect", "determine", "develop", "die", "differ", "dig", "digest", "dim", "diminish", "dine", "dip", "direct", "disappear", "discover", "discuss", "disobey", "display", "dispose", "distribute", "disturb", "disuse", "dive", "divide", "do", "donate", "download", "drag", "draw", "dream", "dress", "drill", "drink", "drive", "drop", "dry", "dump", "dwell", "dye", "earn", "eat", "educate", "empower", "empty", "encircle", "encourage", "encroach", "endanger", "endorse", "endure", "engrave", "enjoy", "enlarge", "enlighten", "enter", "envy", "erase", "escape", "evaporate", "exchange", "exclaim", "exclude", "exist", "expand", "expect", "explain", "explore", "express", "extend", "eye", "face", "fail", "faint", "fall", "fan", "fancy", "favour", "fax", "feed", "feel", "ferry", "fetch", "fight", "fill", "find", "finish", "fish", "fit", "fix", "fizz", "flap", "flash", "flee", "fling", "float", "flop", "fly", "fold", "follow", "forbid", "force", "forecast", "foretell", "forget", "forgive", "forlese", "form", "forsake", "found", "frame", "free", "freeze", "frighten", "fry", "fulfil", "gag", "gain", "gainsay", "gash", "gaze", "get", "give", "glance", "glitter", "glow", "go", "google", "govern", "grab", "grade", "grant", "greet", "grind", "grip", "grow", "guard", "guess", "guide", "handle", "hang", "happen", "harm", "hatch", "hate", "have", "heal", "hear", "heave", "help", "hew", "hide", "hinder", "hiss", "hit", "hoax", "hold", "hop", "hope", "horrify", "hug", "hum", "humiliate", "hunt", "hurl", "hurry", "hurt", "hush", "hustle", "hypnotize", "idealize", "identify", "idolize", "ignite", "ignore", "ill-treat", "illuminate", "illumine", "illustrate", "imagine", "imbibe", "imitate", "immerse", "immolate", "immure", "impair", "impart", "impeach", "impede", "impel", "impend", "imperil", "impinge", "implant", "implicate", "implode", "implore", "imply", "import", "impose", "impress", "imprint", "imprison", "improve", "inaugurate", "incise", "include", "increase", "inculcate", "indent", "indicate", "induce", "indulge", "infect", "infest", "inflame", "inflate", "inflect", "inform", "infringe", "infuse", "ingest", "inhabit", "inhale", "inherit", "initiate", "inject", "injure", "inlay", "innovate", "input", "inquire", "inscribe", "insert", "inspect", "inspire", "install", "insult", "insure", "integrate", "introduce", "invent", "invite", "join", "jump", "justify", "keep", "kick", "kid", "kill", "kiss", "kneel", "knit", "knock", "know", "lade", "land", "last", "latch", "laugh", "lay", "lead", "leak", "lean", "leap", "learn", "leave", "leer", "lend", "let", "lick", "lie", "lie", "lift", "light", "like", "limp", "listen", "live", "look", "lose", "love", "magnify", "maintain", "make", "manage", "march", "mark", "marry", "mash", "match", "matter", "mean", "measure", "meet", "melt", "merge", "mew", "migrate", "milk", "mind", "mislead", "miss", "mistake", "misuse", "mix", "moan", "modify", "moo", "motivate", "mould", "moult", "move", "mow", "multiply", "murmur", "nail", "nap", "need", "neglect", "nip", "nod", "note", "notice", "notify", "nourish", "nurse", "obey", "oblige", "observe", "obstruct", "obtain", "occupy", "occur", "offer", "offset", "omit", "ooze", "open", "operate", "opine", "oppress", "opt", "optimize", "order", "organize", "originate", "output", "overflow", "overtake", "owe", "own", "pacify", "paint", "pardon", "part", "partake", "participate", "pass", "paste", "pat", "patch", "pause", "pay", "peep", "perish", "permit", "persuade", "phone", "place", "plan", "play", "plead", "please", "plod", "plot", "pluck", "ply", "point", "polish", "pollute", "ponder", "pour", "pout", "practise", "praise", "pray", "preach", "prefer", "prepare", "prescribe", "present", "preserve", "preset", "preside", "press", "pretend", "prevent", "print", "proceed", "produce", "progress", "prohibit", "promise", "propose", "prosecute", "protect", "prove", "provide", "pull", "punish", "purify", "push", "put", "qualify", "quarrel", "question", "quit", "race", "rain", "rattle", "reach", "read", "realize", "rebuild", "recall", "recast", "receive", "recite", "recognize", "recollect", "recur", "redo", "reduce", "refer", "reflect", "refuse", "regard", "regret", "relate", "relax", "rely", "remain", "remake", "remove", "rend", "renew", "renounce", "repair", "repeat", "replace", "reply", "report", "request", "resell", "resemble", "reset", "resist", "resolve", "respect", "rest", "restrain", "retain", "retch", "retire", "return", "reuse", "review", "rewind", "rid", "ride", "ring", "rise", "roar", "rob", "roll", "rot", "rub", "rule", "run", "rush", "sabotage", "sack", "sacrifice", "sadden", "saddle", "sag", "sail", "sally", "salute", "salvage", "salve", "sample", "sanctify", "sanction", "sap", "saponify", "sash", "sashay", "sass", "sate", "satiate", "satirise", "satisfy", "saturate", "saunter", "save", "savor", "savvy", "saw", "say", "scab", "scabble", "scald", "scale", "scam", "scan", "scant", "scar", "scare", "scarify", "scarp", "scat", "scatter", "scold", "scorch", "scowl", "scrawl", "scream", "screw", "scrub", "search", "seat", "secure", "see", "seek", "seem", "seize", "select", "sell", "send", "sentence", "separate", "set", "sever", "sew", "shake", "shape", "share", "shatter", "shave", "shear", "shed", "shine", "shirk", "shit", "shiver", "shock", "shoe", "shoot", "shorten", "shout", "show", "shrink", "shun", "shut", "sight", "signal", "signify", "sing", "sink", "sip", "sit", "ski", "skid", "slam", "slay", "sleep", "slide", "slim", "sling", "slink", "slip", "slit", "smash", "smell", "smile", "smite", "smooth", "smother", "snap", "snatch", "sneak", "sneeze", "sniff", "soar", "sob", "solicit", "solve", "soothe", "sort", "sow", "sparkle", "speak", "speed", "spell", "spend", "spill", "spin", "spit", "split", "spoil", "spray", "spread", "spring", "sprout", "squeeze", "stand", "stare", "start", "state", "stay", "steal", "steep", "stem", "step", "sterilize", "stick", "stimulate", "sting", "stink", "stir", "stitch", "stoop", "stop", "store", "strain", "stray", "stress", "stretch", "strew", "stride", "strike", "string", "strive", "study", "submit", "subscribe", "subtract", "succeed", "suck", "suffer", "suggest", "summon", "supply", "support", "suppose", "surge", "surmise", "surpass", "surround", "survey", "survive", "swallow", "sway", "swear", "sweat", "sweep", "swell", "swim", "swing", "swot", "take", "talk", "tap", "taste", "tax", "teach", "tear", "tee", "tell", "tempt", "tend", "terminate", "terrify", "test", "thank", "think", "thrive", "throw", "thrust", "thump", "tie", "tire", "toss", "touch", "train", "trample", "transfer", "transform", "translate", "trap", "travel", "tread", "treasure", "treat", "tree", "tremble", "triumph", "trust", "try", "turn", "type", "typeset", "understand", "undo", "uproot", "upset", "urge", "use", "utter", "value", "vanish", "vary", "verify", "vex", "vie", "view", "violate", "vomit", "wake", "walk", "wander", "want", "warn", "waste", "watch", "water", "wave", "wax", "waylay", "wear", "weave", "wed", "weep", "weigh", "welcome", "wend", "wet", "whip", "whisper", "win", "wind", "wish", "withdraw", "work", "worry", "worship", "wring", "write", "yawn", "yell", "yield", "zinc", "zoom"]-      past: ["abashed", "abated", "abode", "absorbed", "accepted", "accompanied", "ached", "achieved", "acquired", "acted", "added", "addressed", "adjusted", "admired", "admitted", "advised", "afforded", "agreed", "alit", "allowed", "animated", "announced", "answered", "apologized", "appeared", "applauded", "applied", "approached", "approved", "argued", "arose", "arranged", "arrested", "asked", "asserted", "assorted", "astonished", "attacked", "attended", "attracted", "audited", "avoided", "awoke", "banged", "banished", "bashed", "batted", "was", "bore", "bore", "beat", "beautified", "became", "befell", "begged", "began", "behaved", "beheld", "believed", "belonged", "bent", "bereft", "besought", "bet", "betrayed", "bade", "bid", "bound", "bit", "bled", "blessed", "blossomed", "blew", "blurred", "blushed", "boarded", "boasted", "boiled", "bowed", "boxed", "brayed", "broke", "breathed", "bred", "brought", "broadcast", "brushed", "built", "burnt", "burst", "buried", "bust", "bought", "buzzed", "calculated", "called", "canvassed", "captured", "caressed", "carried", "carved", "cashed", "cast", "caught", "caused", "ceased", "celebrated", "challenged", "changed", "charged", "chased", "chatted", "checked", "cheered", "chewed", "chid", "chipped", "choked", "chose", "classified", "cleaned", "clove/cleft", "clicked", "climbed", "clung", "closed", "clad", "clutched", "collapsed", "collected", "coloured", "came", "commented", "compared", "compelled", "competed", "complained", "completed", "concluded", "conducted", "confessed", "confined", "confiscated", "confused", "congratulated", "connected", "connoted", "conquered", "consecrated", "consented", "conserved", "considered", "consigned", "consisted", "consoled", "consorted", "conspired", "constituted", "constrained", "constructed", "construed", "consulted", "contained", "contemned", "contended", "contested", "continued", "contracted", "contradicted", "contrasted", "contributed", "contrived", "controlled", "convened", "converged", "conversed", "converted", "conveyed", "convicted", "convinced", "cooed", "cooked", "cooled", "co-operated", "coped", "copied", "corrected", "corresponded", "corroded", "corrupted", "cost", "coughed", "counselled", "counted", "coursed", "covered", "cowered", "cracked", "crackled", "crashed", "craved", "created", "crept", "cribbed", "crossed", "crowded", "crushed", "cried", "curbed", "cured", "curved", "cut", "cycled", "damaged", "damped", "danced", "dared", "dashed", "dazzled", "dealt", "decayed", "decided", "declared", "decorated", "decreased", "dedicated", "delayed", "deleted", "denied", "depended", "deprived", "derived", "described", "desired", "destroyed", "detached", "detected", "determined", "developed", "died", "differed", "dug", "digested", "dimmed", "diminished", "dined", "dipped", "directed", "disappeared", "discovered", "discussed", "disobeyed", "displayed", "disposed", "distributed", "disturbed", "disused", "dived", "divided", "did", "donated", "downloaded", "dragged", "drew", "dreamt", "dressed", "drilled", "drank", "drove", "dropped", "dried", "dumped", "dwelt", "dyed", "earned", "ate", "educated", "empowered", "emptied", "encircled", "encouraged", "encroached", "endangered", "endorsed", "endured", "engraved", "enjoyed", "enlarged", "enlightened", "entered", "envied", "erased", "escaped", "evaporated", "exchanged", "exclaimed", "excluded", "existed", "expanded", "expected", "explained", "explored", "expressed", "extended", "eyed", "faced", "failed", "fainted", "fell", "fanned", "fancied", "favoured", "faxed", "fed", "felt", "ferried", "fetched", "fought", "filled", "found", "finished", "fished", "fit/fitted", "fixed", "fizzed", "flapped", "flashed", "fled", "flung", "floated", "flopped", "flew", "folded", "followed", "forbade", "forced", "forecast", "foretold", "forgot", "forgave", "forlore", "formed", "forsook", "founded", "framed", "freed", "froze", "frightened", "fried", "fulfilled", "gagged", "gained", "gainsaid", "gashed", "gazed", "got", "gave", "glanced", "glittered", "glowed", "went", "googled", "governed", "grabbed", "graded", "granted", "greeted", "ground", "gripped", "grew", "guarded", "guessed", "guided", "handled", "hung", "happened", "harmed", "hatched", "hated", "had", "healed", "heard", "hove", "helped", "hewed", "hid", "hindered", "hissed", "hit", "hoaxed", "held", "hopped", "hoped", "horrified", "hugged", "hummed", "humiliated", "hunted", "hurled", "hurried", "hurt", "hushed", "hustled", "hypnotized", "idealized", "identified", "idolized", "ignited", "ignored", "ill-treated", "illuminated", "illumined", "illustrated", "imagined", "imbibed", "imitated", "immersed", "immolated", "immured", "impaired", "imparted", "impeached", "impeded", "impelled", "impended", "imperilled", "impinged", "implanted", "implicated", "imploded", "implored", "implied", "imported", "imposed", "impressed", "imprinted", "imprisoned", "improved", "inaugurated", "incised", "included", "increased", "inculcated", "indented", "indicated", "induced", "indulged", "infected", "infested", "inflamed", "inflated", "inflected", "informed", "infringed", "infused", "ingested", "inhabited", "inhaled", "inherited", "initiated", "injected", "injured", "inlaid", "innovated", "input", "inquired", "inscribed", "inserted", "inspected", "inspired", "installed", "insulted", "insured", "integrated", "introduced", "invented", "invited", "joined", "jumped", "justified", "kept", "kicked", "kidded", "killed", "kissed", "knelt", "knit", "knocked", "knew", "laded", "landed", "lasted", "latched", "laughed", "laid", "led", "leaked", "leant", "leapt", "learnt", "left", "leered", "lent", "let", "licked", "lay", "lied", "lifted", "lit", "liked", "limped", "listened", "lived", "looked", "lost", "loved", "magnified", "maintained", "made", "managed", "marched", "marked", "married", "mashed", "matched", "mattered", "meant", "measured", "met", "melted", "merged", "mewed", "migrated", "milked", "minded", "misled", "missed", "mistook", "misused", "mixed", "moaned", "modified", "mooed", "motivated", "moulded", "moulted", "moved", "mowed", "multiplied", "murmured", "nailed", "napped", "needed", "neglected", "nipped", "nodded", "noted", "noticed", "notified", "nourished", "nursed", "obeyed", "obliged", "observed", "obstructed", "obtained", "occupied", "occurred", "offered", "offset", "omitted", "oozed", "opened", "operated", "opined", "oppressed", "opted", "optimized", "ordered", "organized", "originated", "output", "overflowed", "overtook", "owed", "owned", "pacified", "painted", "pardoned", "parted", "partook", "participated", "passed", "pasted", "patted", "patched", "paused", "paid", "peeped", "perished", "permitted", "persuaded", "phoned", "placed", "planned", "played", "pled", "pleased", "plodded", "plotted", "plucked", "plied", "pointed", "polished", "polluted", "pondered", "poured", "pouted", "practised", "praised", "prayed", "preached", "preferred", "prepared", "prescribed", "presented", "preserved", "preset", "presided", "pressed", "pretended", "prevented", "printed", "proceeded", "produced", "progressed", "prohibited", "promised", "proposed", "prosecuted", "protected", "proved", "provided", "pulled", "punished", "purified", "pushed", "put", "qualified", "quarrelled", "questioned", "quit", "raced", "rained", "rattled", "reached", "read", "realized", "rebuilt", "recalled", "recast", "received", "recited", "recognized", "recollected", "recurred", "redid", "reduced", "referred", "reflected", "refused", "regarded", "regretted", "related", "relaxed", "relied", "remained", "remade", "removed", "rent", "renewed", "renounced", "repaired", "repeated", "replaced", "replied", "reported", "requested", "resold", "resembled", "reset", "resisted", "resolved", "respected", "rested", "restrained", "retained", "retched", "retired", "returned", "reused", "reviewed", "rewound", "rid", "rode", "rang", "rose", "roared", "robbed", "rolled", "rotted", "rubbed", "ruled", "ran", "rushed", "sabotaged", "sacked", "sacrificed", "saddened", "saddled", "sagged", "sailed", "sallied", "saluted", "salvaged", "salved", "sampled", "sanctified", "sanctioned", "sapped", "saponified", "sashed", "sashayed", "sassed", "sated", "satiated", "satirised", "satisfied", "saturated", "sauntered", "saved", "savored", "savvied", "sawed", "said", "scabbed", "scabbled", "scalded", "scaled", "scammed", "scanned", "scanted", "scarred", "scared", "scarified", "scarped", "scatted", "scattered", "scolded", "scorched", "scowled", "scrawled", "screamed", "screwed", "scrubbed", "searched", "seated", "secured", "saw", "sought", "seemed", "seized", "selected", "sold", "sent", "sentenced", "separated", "set", "severed", "sewed", "shook", "shaped", "shared", "shattered", "shove", "shore", "shed", "shone", "shirked", "shit", "shivered", "shocked", "shod", "shot", "shortened", "shouted", "showed", "shrank", "shunned", "shut", "sighted", "signalled", "signified", "sang", "sank", "sipped", "sat", "skied", "skidded", "slammed", "slew", "slept", "slid", "slimmed", "slung", "slunk", "slipped", "slit", "smashed", "smelt", "smiled", "smote", "smoothed", "smothered", "snapped", "snatched", "snuck", "sneezed", "sniffed", "soared", "sobbed", "solicited", "solved", "soothed", "sorted", "sowed", "sparkled", "spoke", "sped", "spelt", "spent", "spilt", "span/spun", "spat/spit", "split", "spoilt", "sprayed", "spread", "sprang", "sprouted", "squeezed", "stood", "stared", "started", "stated", "stayed", "stole", "steeped", "stemmed", "stepped", "sterilized", "stuck", "stimulated", "stung", "stank", "stirred", "stitched", "stooped", "stopped", "stored", "strained", "strayed", "stressed", "stretched", "strewed", "strode", "struck", "strung", "strove", "studied", "submitted", "subscribed", "subtracted", "succeeded", "sucked", "suffered", "suggested", "summoned", "supplied", "supported", "supposed", "surged", "surmised", "surpassed", "surrounded", "surveyed", "survived", "swallowed", "swayed", "swore", "sweat", "swept", "swelled", "swam", "swung", "swotted", "took", "talked", "tapped", "tasted", "taxed", "taught", "tore", "teed", "told", "tempted", "tended", "terminated", "terrified", "tested", "thanked", "thought", "throve", "threw", "thrust", "thumped", "tied", "tired", "tossed", "touched", "trained", "trampled", "transferred", "transformed", "translated", "trapped", "travelled", "trod", "treasured", "treated", "treed", "trembled", "triumphed", "trusted", "tried", "turned", "typed", "typeset", "understood", "undid", "uprooted", "upset", "urged", "used", "uttered", "valued", "vanished", "varied", "verified", "vexed", "vied", "viewed", "violated", "vomited", "woke", "walked", "wandered", "wanted", "warned", "wasted", "watched", "watered", "waved", "waxed", "waylaid", "wore", "wove", "wed", "wept", "weighed", "welcomed", "went", "wet", "whipped", "whispered", "won", "wound", "wished", "withdrew", "worked", "worried", "worshipped", "wrung", "wrote", "yawned", "yelled", "yielded", "zincked", "zoomed"] +      past: ["abashed", "abated", "abode", "absorbed", "accepted", "accompanied", "ached", "achieved", "acquired", "acted", "added", "addressed", "adjusted", "admired", "admitted", "advised", "afforded", "agreed", "alit", "allowed", "animated", "announced", "answered", "apologized", "appeared", "applauded", "applied", "approached", "approved", "argued", "arose", "arranged", "arrested", "asked", "asserted", "assorted", "astonished", "attacked", "attended", "attracted", "audited", "avoided", "awoke", "banged", "banished", "bashed", "batted", "was", "bore", "bore", "beat", "beautified", "became", "befell", "begged", "began", "behaved", "beheld", "believed", "belonged", "bent", "bereft", "besought", "bet", "betrayed", "bade", "bid", "bound", "bit", "bled", "blessed", "blossomed", "blew", "blurred", "blushed", "boarded", "boasted", "boiled", "bowed", "boxed", "brayed", "broke", "breathed", "bred", "brought", "broadcast", "brushed", "built", "burnt", "burst", "buried", "bust", "bought", "buzzed", "calculated", "called", "canvassed", "captured", "caressed", "carried", "carved", "cashed", "cast", "caught", "caused", "ceased", "celebrated", "challenged", "changed", "charged", "chased", "chatted", "checked", "cheered", "chewed", "chid", "chipped", "choked", "chose", "classified", "cleaned", "clove/cleft", "clicked", "climbed", "clung", "closed", "clad", "clutched", "collapsed", "collected", "coloured", "came", "commented", "compared", "compelled", "competed", "complained", "completed", "concluded", "conducted", "confessed", "confined", "confiscated", "confused", "congratulated", "connected", "connoted", "conquered", "consecrated", "consented", "conserved", "considered", "consigned", "consisted", "consoled", "consorted", "conspired", "constituted", "constrained", "constructed", "construed", "consulted", "contained", "contemned", "contended", "contested", "continued", "contracted", "contradicted", "contrasted", "contributed", "contrived", "controlled", "convened", "converged", "conversed", "converted", "conveyed", "convicted", "convinced", "cooed", "cooked", "cooled", "co-operated", "coped", "copied", "corrected", "corresponded", "corroded", "corrupted", "cost", "coughed", "counselled", "counted", "coursed", "covered", "cowered", "cracked", "crackled", "crashed", "craved", "created", "crept", "cribbed", "crossed", "crowded", "crushed", "cried", "curbed", "cured", "curved", "cut", "cycled", "damaged", "damped", "danced", "dared", "dashed", "dazzled", "dealt", "decayed", "decided", "declared", "decorated", "decreased", "dedicated", "delayed", "deleted", "denied", "depended", "deprived", "derived", "described", "desired", "destroyed", "detached", "detected", "determined", "developed", "died", "differed", "dug", "digested", "dimmed", "diminished", "dined", "dipped", "directed", "disappeared", "discovered", "discussed", "disobeyed", "displayed", "disposed", "distributed", "disturbed", "disused", "dived", "divided", "did", "donated", "downloaded", "dragged", "drew", "dreamt", "dressed", "drilled", "drank", "drove", "dropped", "dried", "dumped", "dwelt", "dyed", "earned", "ate", "educated", "empowered", "emptied", "encircled", "encouraged", "encroached", "endangered", "endorsed", "endured", "engraved", "enjoyed", "enlarged", "enlightened", "entered", "envied", "erased", "escaped", "evaporated", "exchanged", "exclaimed", "excluded", "existed", "expanded", "expected", "explained", "explored", "expressed", "extended", "eyed", "faced", "failed", "fainted", "fell", "fanned", "fancied", "favoured", "faxed", "fed", "felt", "ferried", "fetched", "fought", "filled", "found", "finished", "fished", "fit/fitted", "fixed", "fizzed", "flapped", "flashed", "fled", "flung", "floated", "flopped", "flew", "folded", "followed", "forbade", "forced", "forecast", "foretold", "forgot", "forgave", "forlore", "formed", "forsook", "founded", "framed", "freed", "froze", "frightened", "fried", "fulfilled", "gagged", "gained", "gainsaid", "gashed", "gazed", "got", "gave", "glanced", "glittered", "glowed", "went", "googled", "governed", "grabbed", "graded", "granted", "greeted", "ground", "gripped", "grew", "guarded", "guessed", "guided", "handled", "hung", "happened", "harmed", "hatched", "hated", "had", "healed", "heard", "hove", "helped", "hewed", "hid", "hindered", "hissed", "hit", "hoaxed", "held", "hopped", "hoped", "horrified", "hugged", "hummed", "humiliated", "hunted", "hurled", "hurried", "hurt", "hushed", "hustled", "hypnotized", "idealized", "identified", "idolized", "ignited", "ignored", "ill-treated", "illuminated", "illumined", "illustrated", "imagined", "imbibed", "imitated", "immersed", "immolated", "immured", "impaired", "imparted", "impeached", "impeded", "impelled", "impended", "imperilled", "impinged", "implanted", "implicated", "imploded", "implored", "implied", "imported", "imposed", "impressed", "imprinted", "imprisoned", "improved", "inaugurated", "incised", "included", "increased", "inculcated", "indented", "indicated", "induced", "indulged", "infected", "infested", "inflamed", "inflated", "inflected", "informed", "infringed", "infused", "ingested", "inhabited", "inhaled", "inherited", "initiated", "injected", "injured", "inlaid", "innovated", "input", "inquired", "inscribed", "inserted", "inspected", "inspired", "installed", "insulted", "insured", "integrated", "introduced", "invented", "invited", "joined", "jumped", "justified", "kept", "kicked", "kidded", "killed", "kissed", "knelt", "knit", "knocked", "knew", "laded", "landed", "lasted", "latched", "laughed", "laid", "led", "leaked", "leant", "leapt", "learnt", "left", "leered", "lent", "let", "licked", "lay", "lied", "lifted", "lit", "liked", "limped", "listened", "lived", "looked", "lost", "loved", "magnified", "maintained", "made", "managed", "marched", "marked", "married", "mashed", "matched", "mattered", "meant", "measured", "met", "melted", "merged", "mewed", "migrated", "milked", "minded", "misled", "missed", "mistook", "misused", "mixed", "moaned", "modified", "mooed", "motivated", "moulded", "moulted", "moved", "mowed", "multiplied", "murmured", "nailed", "napped", "needed", "neglected", "nipped", "nodded", "noted", "noticed", "notified", "nourished", "nursed", "obeyed", "obliged", "observed", "obstructed", "obtained", "occupied", "occurred", "offered", "offset", "omitted", "oozed", "opened", "operated", "opined", "oppressed", "opted", "optimized", "ordered", "organized", "originated", "output", "overflowed", "overtook", "owed", "owned", "pacified", "painted", "pardoned", "parted", "partook", "participated", "passed", "pasted", "patted", "patched", "paused", "paid", "peeped", "perished", "permitted", "persuaded", "phoned", "placed", "planned", "played", "pled", "pleased", "plodded", "plotted", "plucked", "plied", "pointed", "polished", "polluted", "pondered", "poured", "pouted", "practised", "praised", "prayed", "preached", "preferred", "prepared", "prescribed", "presented", "preserved", "preset", "presided", "pressed", "pretended", "prevented", "printed", "proceeded", "produced", "progressed", "prohibited", "promised", "proposed", "prosecuted", "protected", "proved", "provided", "pulled", "punished", "purified", "pushed", "put", "qualified", "quarrelled", "questioned", "quit", "raced", "rained", "rattled", "reached", "read", "realized", "rebuilt", "recalled", "recast", "received", "recited", "recognized", "recollected", "recurred", "redid", "reduced", "referred", "reflected", "refused", "regarded", "regretted", "related", "relaxed", "relied", "remained", "remade", "removed", "rent", "renewed", "renounced", "repaired", "repeated", "replaced", "replied", "reported", "requested", "resold", "resembled", "reset", "resisted", "resolved", "respected", "rested", "restrained", "retained", "retched", "retired", "returned", "reused", "reviewed", "rewound", "rid", "rode", "rang", "rose", "roared", "robbed", "rolled", "rotted", "rubbed", "ruled", "ran", "rushed", "sabotaged", "sacked", "sacrificed", "saddened", "saddled", "sagged", "sailed", "sallied", "saluted", "salvaged", "salved", "sampled", "sanctified", "sanctioned", "sapped", "saponified", "sashed", "sashayed", "sassed", "sated", "satiated", "satirised", "satisfied", "saturated", "sauntered", "saved", "savored", "savvied", "sawed", "said", "scabbed", "scabbled", "scalded", "scaled", "scammed", "scanned", "scanted", "scarred", "scared", "scarified", "scarped", "scatted", "scattered", "scolded", "scorched", "scowled", "scrawled", "screamed", "screwed", "scrubbed", "searched", "seated", "secured", "saw", "sought", "seemed", "seized", "selected", "sold", "sent", "sentenced", "separated", "set", "severed", "sewed", "shook", "shaped", "shared", "shattered", "shove", "shore", "shed", "shone", "shirked", "shit", "shivered", "shocked", "shod", "shot", "shortened", "shouted", "showed", "shrank", "shunned", "shut", "sighted", "signalled", "signified", "sang", "sank", "sipped", "sat", "skied", "skidded", "slammed", "slew", "slept", "slid", "slimmed", "slung", "slunk", "slipped", "slit", "smashed", "smelt", "smiled", "smote", "smoothed", "smothered", "snapped", "snatched", "snuck", "sneezed", "sniffed", "soared", "sobbed", "solicited", "solved", "soothed", "sorted", "sowed", "sparkled", "spoke", "sped", "spelt", "spent", "spilt", "span/spun", "spat/spit", "split", "spoilt", "sprayed", "spread", "sprang", "sprouted", "squeezed", "stood", "stared", "started", "stated", "stayed", "stole", "steeped", "stemmed", "stepped", "sterilized", "stuck", "stimulated", "stung", "stank", "stirred", "stitched", "stooped", "stopped", "stored", "strained", "strayed", "stressed", "stretched", "strewed", "strode", "struck", "strung", "strove", "studied", "submitted", "subscribed", "subtracted", "succeeded", "sucked", "suffered", "suggested", "summoned", "supplied", "supported", "supposed", "surged", "surmised", "surpassed", "surrounded", "surveyed", "survived", "swallowed", "swayed", "swore", "sweat", "swept", "swelled", "swam", "swung", "swotted", "took", "talked", "tapped", "tasted", "taxed", "taught", "tore", "teed", "told", "tempted", "tended", "terminated", "terrified", "tested", "thanked", "thought", "throve", "threw", "thrust", "thumped", "tied", "tired", "tossed", "touched", "trained", "trampled", "transferred", "transformed", "translated", "trapped", "travelled", "trod", "treasured", "treated", "treed", "trembled", "triumphed", "trusted", "tried", "turned", "typed", "typeset", "understood", "undid", "uprooted", "upset", "urged", "used", "uttered", "valued", "vanished", "varied", "verified", "vexed", "vied", "viewed", "violated", "vomited", "woke", "walked", "wandered", "wanted", "warned", "wasted", "watched", "watered", "waved", "waxed", "waylaid", "wore", "wove", "wed", "wept", "weighed", "welcomed", "went", "wet", "whipped", "whispered", "won", "wound", "wished", "withdrew", "worked", "worried", "worshipped", "wrung", "wrote", "yawned", "yelled", "yielded", "zincked", "zoomed"]       past_participle: ["abashed", "abated", "abode", "absorbed", "accepted", "accompanied", "ached", "achieved", "acquired", "acted", "added", "addressed", "adjusted", "admired", "admitted", "advised", "afforded", "agreed", "alit", "allowed", "animated", "announced", "answered", "apologized", "appeared", "applauded", "applied", "approached", "approved", "argued", "arisen", "arranged", "arrested", "asked", "asserted", "assorted", "astonished", "attacked", "attended", "attracted", "audited", "avoided", "awoken", "banged", "banished", "bashed", "batted", "been", "born", "borne", "beaten", "beautified", "become", "befallen", "begged", "begun", "behaved", "beheld", "believed", "belonged", "bent", "bereft", "besought", "bet", "betrayed", "bidden", "bid", "bound", "bitten", "bled", "blessed", "blossomed", "blown", "blurred", "blushed", "boarded", "boasted", "boiled", "bowed", "boxed", "brayed", "broken", "breathed", "bred", "brought", "broadcast", "brushed", "built", "burnt", "burst", "buried", "bust", "bought", "buzzed", "calculated", "called", "canvassed", "captured", "caressed", "carried", "carved", "cashed", "cast", "caught", "caused", "ceased", "celebrated", "challenged", "changed", "charged", "chased", "chatted", "checked", "cheered", "chewed", "chid/chidden", "chipped", "choked", "chosen", "classified", "cleaned", "cloven/cleft", "clicked", "climbed", "clung", "closed", "clad", "clutched", "collapsed", "collected", "coloured", "come", "commented", "compared", "compelled", "competed", "complained", "completed", "concluded", "conducted", "confessed", "confined", "confiscated", "confused", "congratulated", "connected", "connoted", "conquered", "consecrated", "consented", "conserved", "considered", "consigned", "consisted", "consoled", "consorted", "conspired", "constituted", "constrained", "constructed", "construed", "consulted", "contained", "contemned", "contended", "contested", "continued", "contracted", "contradicted", "contrasted", "contributed", "contrived", "controlled", "convened", "converged", "conversed", "converted", "conveyed", "convicted", "convinced", "cooed", "cooked", "cooled", "co-operated", "cope", "copied", "corrected", "corresponded", "corroded", "corrupted", "cost", "coughed", "counselled", "counted", "coursed", "covered", "cowered", "cracked", "crackled", "crashed", "craved", "created", "crept", "cribbed", "crossed", "crowded", "crushed", "cried", "curbed", "cured", "curved", "cut", "cycled", "damaged", "damped", "danced", "dared", "dashed", "dazzled", "dealt", "decayed", "decided", "declared", "decorated", "decreased", "dedicated", "delayed", "deleted", "denied", "depended", "deprived", "derived", "described", "desired", "destroyed", "detached", "detected", "determined", "developed", "died", "differed", "dug", "digested", "dimmed", "diminished", "dined", "dipped", "directed", "disappeared", "discovered", "discussed", "disobeyed", "displayed", "disposed", "distributed", "disturbed", "disused", "dived", "divided", "done", "donated", "downloaded", "dragged", "drawn", "dreamt", "dressed", "drilled", "drunk", "driven", "dropped", "dried", "dumped", "dwelt", "dyed", "earned", "eaten", "educated", "empowered", "emptied", "encircled", "encouraged", "encroached", "endangered", "endorsed", "endured", "engraved", "enjoyed", "enlarged", "enlightened", "entered", "envied", "erased", "escaped", "evaporated", "exchanged", "exclaimed", "excluded", "existed", "expanded", "expected", "explained", "explored", "expressed", "extended", "eyed", "faced", "failed", "fainted", "fallen", "fanned", "fancied", "favoured", "faxed", "fed", "felt", "ferried", "fetched", "fought", "filled", "found", "finished", "fished", "fit/fitted", "fixed", "fizzed", "flapped", "flashed", "fled", "flung", "floated", "flopped", "flown", "folded", "followed", "forbidden", "forced", "forecast", "foretold", "forgotten", "forgiven", "forlorn", "formed", "forsaken", "founded", "framed", "freed", "frozen", "frightened", "fried", "fulfilled", "gagged", "gained", "gainsaid", "gashed", "gazed", "got", "given", "glanced", "glittered", "glowed", "gone", "googled", "governed", "grabbed", "graded", "granted", "greeted", "ground", "gripped", "grown", "guarded", "guessed", "guided", "handled", "hung", "happened", "harmed", "hatched", "hated", "had", "healed", "heard", "hove", "helped", "hewn", "hidden", "hindered", "hissed", "hit", "hoaxed", "held", "hopped", "hoped", "horrified", "hugged", "hummed", "humiliated", "hunted", "hurled", "hurried", "hurt", "hushed", "hustled", "hypnotized", "idealized", "identified", "idolized", "ignited"]       simple_present: ["abashes", "abates", "abides", "absorbs", "accepts", "accompanies", "aches", "achieves", "acquires", "acts", "adds", "addresses", "adjusts", "admires", "admits", "advises", "affords", "agrees", "alights", "allows", "animates", "announces", "answers", "apologizes", "appears", "applauds", "applies", "approaches", "approves", "argues", "arises", "arranges", "arrests", "asks", "asserts", "assorts", "astonishes", "attacks", "attends", "attracts", "audits", "avoids", "awakes", "bangs", "banishes", "bashes", "bats", "is", "bears", "bears", "beats", "beautifies", "becomes", "befalls", "begs", "begins", "behaves", "beholds", "believes", "belongs", "bends", "bereaves", "beseeches", "bets", "betrays", "bids", "bids", "binds", "bites", "bleeds", "blesses", "blossoms", "blows", "blurs", "blushes", "boards", "boasts", "boils", "bows", "boxes", "brays", "breaks", "breathes", "breeds", "brings", "broadcasts", "brushes", "builds", "burns", "bursts", "buries", "busts", "buys", "buzzes", "calculates", "calls", "canvasses", "captures", "caresses", "carries", "carves", "cashes", "casts", "catches", "causes", "ceases", "celebrates", "challenges", "changes", "charges", "chases", "chats", "checks", "cheers", "chews", "chides", "chips", "chokes", "chooses", "classifies", "cleans", "cleaves", "clicks", "climbs", "clings", "closes", "clothes", "clutches", "collapses", "collects", "colours", "comes", "comments", "compares", "compels", "competes", "complains", "completes", "concludes", "conducts", "confesses", "confines", "confiscates", "confuses", "congratulates", "connects", "connotes", "conquers", "consecrates", "consents", "conserves", "considers", "consigns", "consists", "consoles", "consorts", "conspires", "constitutes", "constrains", "constructs", "construes", "consults", "contains", "contemns", "contends", "contests", "continues", "contracts", "contradicts", "contrasts", "contributes", "contrives", "controls", "convenes", "converges", "converses", "converts", "conveys", "convicts", "convinces", "coos", "cooks", "cools", "co-operates", "copes", "copies", "corrects", "corresponds", "corrodes", "corrupts", "costs", "coughs", "counsels", "counts", "courses", "covers", "cowers", "cracks", "crackles", "crashes", "craves", "creates", "creeps", "cribs", "crosses", "crowds", "crushes", "cries", "curbs", "cures", "curves", "cuts", "cycles", "damages", "damps", "dances", "dares", "dashes", "dazzles", "deals", "decays", "decides", "declares", "decorates", "decreases", "dedicates", "delays", "deletes", "denies", "depends", "deprives", "derives", "describes", "desires", "destroys", "detaches", "detects", "determines", "develops", "dies", "differs", "digs", "digests", "dims", "diminishes", "dines", "dips", "directs", "disappears", "discovers", "discusses", "disobeys", "displays", "disposes", "distributes", "disturbs", "disuses", "dives", "divides", "does", "donates", "downloads", "drags", "draws", "dreams", "dresses", "drills", "drinks", "drives", "drops", "dries", "dumps", "dwells", "dyes", "earns", "eats", "educates", "empowers", "empties", "encircles", "encourages", "encroaches", "endangers", "endorses", "endures", "engraves", "enjoys", "enlarges", "enlightens", "enters", "envies", "erases", "escapes", "evaporates", "exchanges", "exclaims", "excludes", "exists", "expands", "expects", "explains", "explores", "expresses", "extends", "eyes", "faces", "fails", "faints", "falls", "fans", "fancies", "favours", "faxes", "feeds", "feels", "ferries", "fetches", "fights", "fills", "finds", "finishes", "fishes", "fits", "fixes", "fizzes", "flaps", "flashes", "flees", "flings", "floats", "flops", "flies", "folds", "follows", "forbids", "forces", "forecasts", "foretells", "forgets", "forgives", "forlese", "forms", "forsakes", "founds", "frames", "frees", "freezes", "frightens", "fries", "fulfils", "gags", "gains", "gainsays", "gashes", "gazes", "gets", "gives", "glances", "glitters", "glows", "goes", "googles", "governs", "grabs", "grades", "grants", "greets", "grinds", "grips", "grows", "guards", "guesses", "guides", "handles", "hangs", "happens", "harms", "hatches", "hates", "has", "heals", "hears", "heaves", "helps", "hews", "hides", "hinders", "hisses", "hits", "hoaxes", "holds", "hops", "hopes", "horrifies", "hugs", "hums", "humiliates", "hunts", "hurls", "hurries", "hurts", "hushes", "hustles", "hypnotizes", "idealizes", "identifies", "idolizes", "ignites"]-      ing_form: ["abashing", "abating", "abiding", "absorbing", "accepting", "accompanying", "aching", "achieving", "acquiring", "acting", "adding", "addressing", "adjusting", "admiring", "admitting", "advising", "affording", "agreeing", "alighting", "allowing", "animating", "announcing", "answering", "apologizing", "appearing", "applauding", "applying", "approaching", "approving", "arguing", "arising", "arranging", "arresting", "asking", "asserting", "assorting", "astonishing", "attacking", "attending", "attracting", "auditing", "avoiding", "awaking", "banging", "banishing", "bashing", "batting", "being", "bearing", "bearing", "beating", "beautifying", "becoming", "befalling", "begging", "beginning", "behaving", "beholding", "believing", "belonging", "bending", "bereaving", "beseeching", "betting", "betraying", "bidding", "bidding", "binding", "biting", "bleeding", "blessing", "blossoming", "blowing", "blurring", "blushing", "boarding", "boasting", "boiling", "bowing", "boxing", "braying", "breaking", "breathing", "breeding", "bringing", "broadcasting", "brushing", "building", "burning", "bursting", "burying", "busting", "buying", "buzzing", "calculating", "calling", "canvassing", "capturing", "caressing", "carrying", "carving", "cashing", "casting", "catching", "causing", "ceasing", "celebrating", "challenging", "changing", "charging", "chasing", "chatting", "checking", "cheering", "chewing", "chiding", "chipping", "choking", "choosing", "classifying", "cleaning", "cleaving", "clicking", "climbing", "clinging", "closing", "clothing", "clutching", "collapsing", "collecting", "colouring", "coming", "commenting", "comparing", "compelling", "competing", "complaining", "completing", "concluding", "conducting", "confessing", "confining", "confiscating", "confusing", "congratulating", "connecting", "connoting", "conquering", "consecrating", "consenting", "conserving", "considering", "consigning", "consisting", "consoling", "consorting", "conspiring", "constituting", "constraining", "constructing", "construing", "consulting", "containing", "contemning", "contending", "contesting", "continuing", "contracting", "contradicting", "contrasting", "contributing", "contriving", "controlling", "convening", "converging", "conversing", "converting", "conveying", "convicting", "convincing", "cooing", "cooking", "cooling", "co-operating", "coping", "copying", "correcting", "corresponding", "corroding", "corrupting", "costing", "coughing", "counselling", "counting", "coursing", "covering", "cowering", "cracking", "crackling", "crashing", "craving", "creating", "creeping", "cribbing", "crossing", "crowding", "crushing", "crying", "curbing", "curing", "curving", "cutting", "cycling", "damaging", "damping", "dancing", "daring", "dashing", "dazzling", "dealing", "decaying", "deciding", "declaring", "decorating", "decreasing", "dedicating", "delaying", "deleting", "denying", "depending", "depriving", "deriving", "describing", "desiring", "destroying", "detaching", "detecting", "determining", "developing", "dying", "differing", "digging", "digesting", "dimming", "diminishing", "dining", "dipping", "directing", "disappearing", "discovering", "discussing", "disobeying", "displaying", "disposing", "distributing", "disturbing", "disusing", "diving", "dividing", "doing", "donating", "downloading", "dragging", "drawing", "dreaming", "dressing", "drilling", "drinking", "driving", "dropping", "drying", "dumping", "dwelling", "dyeing", "earning", "eating", "educating", "empowering", "emptying", "encircling", "encouraging", "encroaching", "entangling", "endorsing", "enduring", "engraving", "enjoying", "enlarging", "enlightening", "entering", "envying", "erasing", "escaping", "evaporating", "exchanging", "exclaiming", "excluding", "existing", "expanding", "expecting", "explaining", "exploring", "expressing", "extending", "eyeing", "facing", "failing", "fainting", "falling", "fanning", "fancying", "favouring", "faxing", "feeding", "feeling", "ferrying", "fetching", "fighting", "filling", "finding", "finishing", "fishing", "fitting", "fixing", "fizzing", "flapping", "flashing", "fleeing", "flinging", "floating", "flopping", "flying", "folding", "following", "forbidding", "forcing", "forecasting", "foretelling", "forgetting", "forgiving", "forlesing", "forming", "forsaking", "founding", "framing", "freeing", "freezing", "frightening", "frying", "fulfilling", "gagging", "gaining", "gainsaying", "gashing", "gazing", "getting", "giving", "glancing", "glittering", "glowing", "going", "googling", "governing", "grabbing", "grading", "granting", "greeting", "grinding", "gripping", "growing", "guarding", "guessing", "guiding", "handling", "hanging", "happening", "harming", "hatching", "hating", "having", "healing", "hearing", "heaving", "helping", "hewing", "hiding", "hindering", "hissing", "hitting", "hoaxing", "holding", "hopping", "hoping", "horrifying", "hugging", "humming", "humiliating", "hunting", "hurling", "hurrying", "hurting", "hushing", "hustling", "hypnotizing", "idealizing", "identifying", "idolizing", "igniting"]+      ing_form: ["abashing", "abating", "abiding", "absorbing", "accepting", "accompanying", "aching", "achieving", "acquiring", "acting", "adding", "addressing", "adjusting", "admiring", "admitting", "advising", "affording", "agreeing", "alighting", "allowing", "animating", "announcing", "answering", "apologizing", "appearing", "applauding", "applying", "approaching", "approving", "arguing", "arising", "arranging", "arresting", "asking", "asserting", "assorting", "astonishing", "attacking", "attending", "attracting", "auditing", "avoiding", "awaking", "banging", "banishing", "bashing", "batting", "being", "bearing", "bearing", "beating", "beautifying", "becoming", "befalling", "begging", "beginning", "behaving", "beholding", "believing", "belonging", "bending", "bereaving", "beseeching", "betting", "betraying", "bidding", "bidding", "binding", "biting", "bleeding", "blessing", "blossoming", "blowing", "blurring", "blushing", "boarding", "boasting", "boiling", "bowing", "boxing", "braying", "breaking", "breathing", "breeding", "bringing", "broadcasting", "brushing", "building", "burning", "bursting", "burying", "busting", "buying", "buzzing", "calculating", "calling", "canvassing", "capturing", "caressing", "carrying", "carving", "cashing", "casting", "catching", "causing", "ceasing", "celebrating", "challenging", "changing", "charging", "chasing", "chatting", "checking", "cheering", "chewing", "chiding", "chipping", "choking", "choosing", "classifying", "cleaning", "cleaving", "clicking", "climbing", "clinging", "closing", "clothing", "clutching", "collapsing", "collecting", "colouring", "coming", "commenting", "comparing", "compelling", "competing", "complaining", "completing", "concluding", "conducting", "confessing", "confining", "confiscating", "confusing", "congratulating", "connecting", "connoting", "conquering", "consecrating", "consenting", "conserving", "considering", "consigning", "consisting", "consoling", "consorting", "conspiring", "constituting", "constraining", "constructing", "construing", "consulting", "containing", "contemning", "contending", "contesting", "continuing", "contracting", "contradicting", "contrasting", "contributing", "contriving", "controlling", "convening", "converging", "conversing", "converting", "conveying", "convicting", "convincing", "cooing", "cooking", "cooling", "co-operating", "coping", "copying", "correcting", "corresponding", "corroding", "corrupting", "costing", "coughing", "counselling", "counting", "coursing", "covering", "cowering", "cracking", "crackling", "crashing", "craving", "creating", "creeping", "cribbing", "crossing", "crowding", "crushing", "crying", "curbing", "curing", "curving", "cutting", "cycling", "damaging", "damping", "dancing", "daring", "dashing", "dazzling", "dealing", "decaying", "deciding", "declaring", "decorating", "decreasing", "dedicating", "delaying", "deleting", "denying", "depending", "depriving", "deriving", "describing", "desiring", "destroying", "detaching", "detecting", "determining", "developing", "dying", "differing", "digging", "digesting", "dimming", "diminishing", "dining", "dipping", "directing", "disappearing", "discovering", "discussing", "disobeying", "displaying", "disposing", "distributing", "disturbing", "disusing", "diving", "dividing", "doing", "donating", "downloading", "dragging", "drawing", "dreaming", "dressing", "drilling", "drinking", "driving", "dropping", "drying", "dumping", "dwelling", "dyeing", "earning", "eating", "educating", "empowering", "emptying", "encircling", "encouraging", "encroaching", "entangling", "endorsing", "enduring", "engraving", "enjoying", "enlarging", "enlightening", "entering", "envying", "erasing", "escaping", "evaporating", "exchanging", "exclaiming", "excluding", "existing", "expanding", "expecting", "explaining", "exploring", "expressing", "extending", "eyeing", "facing", "failing", "fainting", "falling", "fanning", "fancying", "favouring", "faxing", "feeding", "feeling", "ferrying", "fetching", "fighting", "filling", "finding", "finishing", "fishing", "fitting", "fixing", "fizzing", "flapping", "flashing", "fleeing", "flinging", "floating", "flopping", "flying", "folding", "following", "forbidding", "forcing", "forecasting", "foretelling", "forgetting", "forgiving", "forlesing", "forming", "forsaking", "founding", "framing", "freeing", "freezing", "frightening", "frying", "fulfilling", "gagging", "gaining", "gainsaying", "gashing", "gazing", "getting", "giving", "glancing", "glittering", "glowing", "going", "googling", "governing", "grabbing", "grading", "granting", "greeting", "grinding", "gripping", "growing", "guarding", "guessing", "guiding", "handling", "hanging", "happening", "harming", "hatching", "hating", "having", "healing", "hearing", "heaving", "helping", "hewing", "hiding", "hindering", "hissing", "hitting", "hoaxing", "holding", "hopping", "hoping", "horrifying", "hugging", "humming", "humiliating", "hunting", "hurling", "hurrying", "hurting", "hushing", "hustling", "hypnotizing", "idealizing", "identifying", "idolizing", "igniting", "ignoring", "illuminating", "illustrating", "imagining", "imbibing", "imitating", "immersing", "immolating", "impairing", "imparting", "impeaching", "impeding", "impinging", "implanting", "implicating", "imploding", "imploring", "implying", "importing", "imposing", "impressing", "imprinting", "imprisoning", "improving", "inaugurating", "including", "increasing", "inculcating", "indenting", "indicating", "inducing", "indulging", "infecting", "infesting", "inflaming", "inflating", "inflecting", "informing", "infringing", "infusing", "ingesting", "inhabiting", "inhaling", "inheriting", "initiating", "injecting", "injuring", "innovating", "inputting", "inquiring", "inscribing", "inserting", "inspecting", "inspiring", "installing", "insulting", "integrating", "introducing", "inventing", "inviting", "joining", "jumping", "justifying", "keeping", "kicking", "kidding", "killing", "kissing", "kneeling", "knitting", "knocking", "landing", "lasting", "latching", "laughing", "laying", "leading", "leaking", "leaning", "leaping", "learning", "leaving", "leering", "lending", "letting", "licking", "lying", "lifting", "lighting", "liking", "limping", "listening", "living", "looking", "losing", "loving", "magnifying", "maintaining", "making", "managing", "marching", "marking", "marrying", "mashing", "matching", "measuring", "meeting", "melting", "merging", "mewing", "migrating", "milking", "minding", "misleading", "missing", "mistaking", "misusing", "mixing", "moaning", "modifying", "mooing", "motivating", "moulding", "moving", "mowing", "multiplying", "murmuring", "nailing", "napping", "needing", "neglecting", "nipping", "nodding", "noting", "noticing", "notifying", "nourishing", "nursing", "obeying", "obliging", "observing", "obstructing", "obtaining", "occupying", "offering", "offsetting", "omitting", "oozing", "opening", "operating", "opining", "oppressing", "opting", "optimizing", "ordering", "organizing", "originating", "outputting", "overflowing", "overtaking", "owing", "owning", "pacifying", "painting", "pardoning", "parting", "partaking", "participating", "passing", "pasting", "patting", "patching", "pausing", "paying", "peeping", "perishing", "permitting", "persuading", "phoning", "placing", "planning", "playing", "pleading", "pleasing", "plodding", "plotting", "plucking", "plying", "pointing", "polishing", "polluting", "pondering", "pouring", "pouting", "practicing", "praising", "praying", "preaching", "preparing", "prescribing", "presenting", "preserving", "presiding", "pressing", "pretending", "preventing", "printing", "proceeding", "producing", "progressing", "prohibiting", "promising", "proposing", "prosecuting", "protecting", "proving", "providing", "pulling", "punishing", "purifying", "pushing", "putting", "qualifying", "quarreling", "questioning", "quitting", "racing", "raining", "rattling", "reaching", "reading", "realizing", "rebuilding", "recalling", "recasting", "receiving", "reciting", "recognizing", "recollecting", "recurring", "redoing", "reducing", "referring", "reflecting", "refusing", "regarding", "regretting", "relating", "relaxing", "relying", "remaining", "remaking", "removing", "rending", "renewing", "renouncing", "repairing", "repeating", "replacing", "replying", "reporting", "requesting", "reselling", "resembling", "resetting", "resisting", "resolving", "respecting", "resting", "restraining", "retaining", "retching", "retiring", "returning", "reusing", "reviewing", "rewinding", "ridding", "riding", "ringing", "rising", "roaring", "robbing", "rolling", "rotting", "rubbing", "ruling", "running", "rushing", "sabotaging", "sacking", "sacrificing", "saddening", "saddling", "sagging", "sailing", "saluting", "salvaging", "sampling", "sanctifying", "sanctioning", "sapping", "sashaying", "sassing", "sating", "satiating", "satirizing", "satisfying", "saturating", "sauntering", "saving", "savoring", "sawing", "saying", "scabbing", "scalding", "scaling", "scamming", "scanning", "scarring", "scaring", "scarping", "scatting", "scattering", "scolding", "scorching", "scowling", "scrawling", "screaming", "screwing", "scrubbing", "searching", "seating", "securing", "seeing", "seeking", "seeming", "seizing", "selecting", "selling", "sending", "sentencing", "separating", "setting", "severing", "sewing", "shaking", "shaping", "sharing", "shattering", "shaving", "shearing", "shedding", "shining", "shirking", "shitting", "shivering", "shocking", "shooting", "shortening", "shouting", "showing", "shrinking", "shunning", "shutting", "signaling", "signifying", "singing", "sinking", "sipping", "sitting", "skiing", "skidding", "slamming", "slaying", "sleeping", "sliding", "slimming", "slinging", "slinking", "slipping", "slitting", "smashing", "smelling", "smiling", "smiting", "smoothing", "smothering", "snapping", "snatching", "sneaking", "sneezing", "sniffing", "soaring", "sobbing", "soliciting", "solving", "soothing", "sorting", "sowing", "sparkling", "speaking", "speeding", "spelling", "spending", "spilling", "spinning", "spitting", "splitting", "spoiling", "spraying", "spreading", "springing", "sprouting", "squeezing", "standing", "staring", "starting", "stating", "staying", "stealing", "steeping", "stemming", "stepping", "sterilizing", "sticking", "stimulating", "stinging", "stinking", "stirring", "stitching", "stooping", "stopping", "storing", "straining", "straying", "stressing", "stretching", "strewing", "striding", "striking", "stringing", "striving", "studying", "submitting", "subscribing", "subtracting", "succeeding", "sucking", "suffering", "suggesting", "summoning", "supplying", "supporting", "supposing", "surging", "surmising", "surpassing", "surrounding", "surveying", "surviving", "swallowing", "swaying", "swearing", "sweating", "sweeping", "swelling", "swimming", "swinging", "taking", "talking", "tapping", "tasting", "taxing", "teaching", "tearing", "teeing", "telling", "tempting", "tending", "terminating", "terrifying", "testing", "thanking", "thinking", "thriving", "throwing", "thrusting", "thumping", "tying", "tiring", "tossing", "touching", "training", "trampling", "transferring", "transforming", "translating", "trapping", "traveling", "treading", "treasuring", "treating", "trembling", "trusting", "trying", "turning", "typing", "understanding", "undoing", "uprooting", "upsetting", "urging", "using", "uttering", "valuing", "vanishing", "varying", "verifying", "vexing", "vying", "viewing", "violating", "vomiting", "waking", "walking", "wandering", "wanting", "warning", "wasting", "watching", "watering", "waving", "waxing", "waylaying", "wearing", "weaving", "wedding", "weeping", "weighing", "welcoming", "wending", "wetting", "whipping", "whispering", "winning", "winding", "wishing", "withdrawing", "working", "worrying", "worshipping", "wringing", "writing", "yawning", "yelling", "yielding", "zooming"]
faker/lib/locales/ja.yml view
@@ -46,7 +46,7 @@      games:       pokemon:-        names: ["フシギダネ", "フシギソウ", "フシギバナ", "ヒトカゲ", "リザード", "リザードン", "ゼニガメ", "カメール", "カメックス", "キャタピー", "トランセル", "バタフリー", "ビードル", "コクーン", "スピアー", "ポッポ", "ピジョン", "ピジョット", "コラッタ", "ラッタ", "オニスズメ", "オニドリル", "アーボ", "アーボック", "ピカチュウ", "ライチュウ", "サンド", "サンドパン", "ニドラン♀", "ニドリーナ", "ニドクイン", "ニドラン♂", "ニドリーノ", "ニドキング", "ピッピ", "ピクシー", "ロコン", "キュウコン", "プリン", "プクリン", "ズバット", "ゴルバット", "ナゾノクサ", "クサイハナ", "ラフレシア", "パラス", "パラセクト", "コンパン", "モルフォン", "ディグダ", "ダグトリオ", "ニャース", "ペルシアン", "コダック", "ゴルダック", "マンキー", "オコリザル", "ガーディ", "ウインディ", "ニョロモ", "ニョロゾ", "ニョロボン", "ケーシィ", "ユンゲラー", "フーディン", "ワンリキー", "ゴーリキー", "カイリキー", "マダツボミ", "ウツドン", "ウツボット", "メノクラゲ", "ドククラゲ", "イシツブテ", "ゴローン", "ゴローニャ", "ポニータ", "ギャロップ", "ヤドン", "ヤドラン", "コイル", "レアコイル", "カモネギ", "ドードー", "ドードリオ", "パウワウ", "ジュゴン", "ベトベター", "ベトベトン", "シェルダー", "パルシェン", "ゴース", "ゴースト", "ゲンガー", "イワーク", "スリープ", "スリーパー", "クラブ", "キングラー", "ビリリダマ", "マルマイン", "タマタマ", "ナッシー", "カラカラ", "ガラガラ", "サワムラー", "エビワラー", "ベロリンガ", "ドガース", "マタドガス", "サイホーン", "サイドン", "ラッキー", "モンジャラ", "ガルーラ", "タッツー", "シードラ", "トサキント", "アズマオウ", "ヒトデマン", "スターミー", "バリヤード", "ストライク", "ルージュラ", "エレブー", "ブーバー", "カイロス", "ケンタロス", "コイキング", "ギャラドス", "ラプラス", "メタモン", "イーブイ", "シャワーズ", "サンダース", "ブースター", "ポリゴン", "オムナイト", "オムスター", "カブト", "カブトプス", "プテラ", "カビゴン", "フリーザー", "サンダー", "ファイヤー", "ミニリュウ", "ハクリュー", "カイリュー", "ミュウツー", "ミュウ"]+        names: ["フシギダネ", "フシギソウ", "フシギバナ", "ヒトカゲ", "リザード", "リザードン", "ゼニガメ", "カメール", "カメックス", "キャタピー", "トランセル", "バタフリー", "ビードル", "コクーン", "スピアー", "ポッポ", "ピジョン", "ピジョット", "コラッタ", "ラッタ", "オニスズメ", "オニドリル", "アーボ", "アーボック", "ピカチュウ", "ライチュウ", "サンド", "サンドパン", "ニドラン♀", "ニドリーナ", "ニドクイン", "ニドラン♂", "ニドリーノ", "ニドキング", "ピッピ", "ピクシー", "ロコン", "キュウコン", "プリン", "プクリン", "ズバット", "ゴルバット", "ナゾノクサ", "クサイハナ", "ラフレシア", "パラス", "パラセクト", "コンパン", "モルフォン", "ディグダ", "ダグトリオ", "ニャース", "ペルシアン", "コダック", "ゴルダック", "マンキー", "オコリザル", "ガーディ", "ウインディ", "ニョロモ", "ニョロゾ", "ニョロボン", "ケーシィ", "ユンゲラー", "フーディン", "ワンリキー", "ゴーリキー", "カイリキー", "マダツボミ", "ウツドン", "ウツボット", "メノクラゲ", "ドククラゲ", "イシツブテ", "ゴローン", "ゴローニャ", "ポニータ", "ギャロップ", "ヤドン", "ヤドラン", "コイル", "レアコイル", "カモネギ", "ドードー", "ドードリオ", "パウワウ", "ジュゴン", "ベトベター", "ベトベトン", "シェルダー", "パルシェン", "ゴース", "ゴースト", "ゲンガー", "イワーク", "スリープ", "スリーパー", "クラブ", "キングラー", "ビリリダマ", "マルマイン", "タマタマ", "ナッシー", "カラカラ", "ガラガラ", "サワムラー", "エビワラー", "ベロリンガ", "ドガース", "マタドガス", "サイホーン", "サイドン", "ラッキー", "モンジャラ", "ガルーラ", "タッツー", "シードラ", "トサキント", "アズマオウ", "ヒトデマン", "スターミー", "バリヤード", "ストライク", "ルージュラ", "エレブー", "ブーバー", "カイロス", "ケンタロス", "コイキング", "ギャラドス", "ラプラス", "メタモン", "イーブイ", "シャワーズ", "サンダース", "ブースター", "ポリゴン", "オムナイト", "オムスター", "カブト", "カブトプス", "プテラ", "カビゴン", "フリーザー", "サンダー", "ファイヤー", "ミニリュウ", "ハクリュー", "カイリュー", "ミュウツー", "ミュウ", "チコリータ", "ベイリーフ", "メガニウム", "ヒノアラシ", "マグマラシ", "バクフーン", "ワニノコ", "アリゲイツ", "オーダイル", "オタチ", "オオタチ", "ホーホー", "ヨルノズク", "レディバ", "レディアン", "イトマル", "アリアドス", "クロバット", "チョンチー", "ランターン", "ピチュー", "ピィ", "ププリン", "トゲピー", "トゲチック", "ネイティ", "ネイティオ", "メリープ", "モココ", "デンリュウ", "キレイハナ", "マリル", "マリルリ", "ウソッキー", "ニョロトノ", "ハネッコ", "ポポッコ", "ワタッコ", "エイパム", "ヒマナッツ", "キマワリ", "ヤンヤンマ", "ウパー", "ヌオー", "エーフィ", "ブラッキー", "ヤミカラス", "ヤドキング", "ムウマ", "アンノーン", "ソーナンス", "キリンリキ", "クヌギダマ", "フォレトス", "ノコッチ", "グライガー", "ハガネール", "ブルー", "グランブル", "ハリーセン", "ハッサム", "ツボツボ", "ヘラクロス", "ニューラ", "ヒメグマ", "リングマ", "マグマッグ", "マグカルゴ", "ウリムー", "イノムー", "サニーゴ", "テッポウオ", "オクタン", "デリバード", "マンタイン", "エアームド", "デルビル", "ヘルガー", "キングドラ", "ゴマゾウ", "ドンファン", "ポリゴン2", "オドシシ", "ドーブル", "バルキー", "カポエラー", "ムチュール", "エレキッド", "ブビィ", "ミルタンク", "ハピナス", "ライコウ", "エンテイ", "スイクン", "ヨーギラス", "サナギラス", "バンギラス", "ルギア", "ホウオウ", "セレビィ"]         locations: ["マサラタウン", "トキワシティ", "トキワのもり", "ニビシティ", "おつきみやま", "ハナダシティ", "イワヤマトンネル", "クチバシティ", "むじんはつでんしょ", "シオンタウン", "タマムシシティ", "ヤマブキシティ", "セキチクシティ", "サファリゾーン", "サイクリングロード", "ふたごじま", "グレンじま", "セキエイこうげん"]         moves: ["すいとる", "ようかいえき", "とける", "こうそくいどう", "ドわすれ", "オーロラビーム", "たまなげ", "バリアー", "がまん", "しめつける", "かみつく", "ふぶき", "のしかかり", "ホネこんぼう", "ホネブーメラン", "あわ", "バブルこうせん", "からではさむ", "れんぞくパンチ", "あやしいひかり", "ねんりき", "からみつく", "テクスチャー", "カウンター", "クラブハンマー", "いあいぎり", "まるくなる", "あなをほる", "かなしばり", "ピヨピヨパンチ", "にどげり", "おうふくビンタ", "かげぶんしん", "すてみタックル", "りゅうのいかり", "ゆめくい", "ドリルくちばし", "じしん", "タマゴばくだん", "ひのこ", "だいばくはつ", "だいもんじ", "ほのおのパンチ", "ほのおのうず", "じわれ", "かえんほうしゃ", "フラッシュ", "そらをとぶ", "きあいだめ", "みだれづき", "みだれひっかき", "へびにらみ", "なきごえ", "せいちょう", "ハサミギロチン", "かぜおこし", "かたくなる", "くろいきり", "ずつき", "とびひざげり", "つのでつく", "つのドリル", "ハイドロポンプ", "はかいこうせん", "ひっさつまえば", "さいみんじゅつ", "れいとうビーム", "れいとうパンチ", "とびげり", "からてチョップ", "スプーンまげ", "きゅうけつ", "やどりぎのタネ", "にらみつける", "したでなめる", "ひかりのかべ", "あくまのキッス", "けたぐり", "ヨガのポーズ", "メガドレイン", "メガトンキック", "メガトンパンチ", "ゆびをふる", "ものまね", "ちいさくなる", "オウムがえし", "しろいきり", "ナイトヘッド", "ネコにこばん", "つつく", "はなびらのまい", "ミサイルばり", "どくガス", "どくのこな", "どくばり", "はたく", "サイケこうせん", "サイコキネシス", "サイコウェーブ", "でんこうせっか", "いかり", "はっぱカッター", "かまいたち", "じこさいせい", "リフレクター", "ねむる", "ほえる", "いわなだれ", "いわおとし", "まわしげり", "すなかけ", "ひっかく", "いやなおと", "ちきゅうなげ", "じばく", "かくばる", "うたう", "ロケットずつき", "ゴッドバード", "たたきつける", "きりさく", "ねむりごな", "ヘドロこうげき", "スモッグ", "えんまく", "タマゴうみ", "ソーラービーム", "ソニックブーム", "とげキャノン", "はねる", "キノコのほうし", "ふみつけ", "かいりき", "いとをはく", "わるあがき", "しびれごな", "じごくぐるま", "みがわり", "いかりのまえば", "ちょうおんぱ", "なみのり", "スピードスター", "つるぎのまい", "たいあたり", "しっぽをふる", "とっしん", "テレポート", "あばれる", "かみなり", "かみなりパンチ", "でんきショック", "でんじは", "10まんボルト", "どくどく", "へんしん", "トライアタック", "ダブルニードル", "はさむ", "つるのムチ", "みずでっぽう", "たきのぼり", "ふきとばし", "つばさでうつ", "からにこもる", "まきつく"] 
faker/lib/locales/vi.yml view
@@ -42,7 +42,7 @@                  "Trịnh", "Đinh", "Lâm", "Phùng", "Mai", "Tô", "Trương", "Hà",                  "Vinh", "Nhung", "Hòa", "Tiến", "Tâm", "Bửu", "Loan", "Hiền", "Hải",                  "Vân", "Kha", "Minh", "Nhân", "Triệu", "Tuân", "Hữu", "Đức", "Phú", "Khoa",-                 "Thắgn", "Sơn", "Dung", "Tú", "Trinh", "Thảo", "Sa", "Kim", "Long", "Thi",+                 "Thắng", "Sơn", "Dung", "Tú", "Trinh", "Thảo", "Sa", "Kim", "Long", "Thi",                  "Cường", "Ngọc", "Sinh", "Khang", "Phong", "Thắm", "Thu", "Thủy", "Nhàn"]       name:         - "#{first_name} #{last_name}"
src/Config.hs view
@@ -6,6 +6,7 @@ module Config   ( SourceData(..)   , fetchData+  , fetchDataSingle   , mapSource   , populateLocales   ) where@@ -13,15 +14,18 @@ import Control.Monad (filterM) import Control.Monad.Catch import Control.Monad.IO.Class+import qualified Data.ByteString as BS+import qualified Data.HashMap.Strict as HM import Data.Monoid ((<>)) import Data.Text (Text, pack, unpack)+import Data.Vector (Vector) import Data.Yaml import Faker+import Faker.Internal.Types (CacheFileKey(..), SourceData(..)) import Language.Haskell.TH (Name) import Paths_fakedata (getDataFileName) import System.Directory (doesFileExist, listDirectory)-import System.FilePath (takeExtension, takeFileName)-import System.FilePath+import System.FilePath ((<.>), (</>), takeExtension, takeFileName)  localesDirectory :: FilePath localesDirectory = "faker/lib/locales"@@ -48,155 +52,6 @@   let files' = map (pack . takeFileName) files   pure files' -data SourceData-  = Address-  | Name-  | Ancient-  | Animal-  | App-  | Appliance-  | ATHF-  | Artist-  | Basketball-  | BTTF-  | Bank-  | Beer-  | BoJackHorseman-  | Book-  | BossaNova-  | BreakingBad-  | Buffy-  | Business-  | Cannabis-  | Cat-  | ChuckNorris-  | Code-  | Coffee-  | Coin-  | Color-  | Commerce-  | Community-  | Company-  | Construction-  | Cosmere-  | Compass-  | CryptoCoin-  | CultureSeries-  | Currency-  | DcComics-  | Demographic-  | Dessert-  | Device-  | Dog-  | Dota-  | DrWho-  | DragonBall-  | DumbAndDumber-  | Dune-  | Educator-  | ElderScrolls-  | ElectricalComponents-  | Esport-  | Fallout-  | FamilyGuy-  | File-  | Finance-  | Food-  | Football-  | FreshPrinceOfBelAir-  | Friends-  | FunnyName-  | GameOfThrones-  | Gender-  | GhostBusters-  | GratefulDead-  | GreekPhilosophers-  | Hacker-  | HalfLife-  | HarryPotter-  | Heroes-  | HeroesOfTheStorm-  | HeyArnold-  | Hipster-  | HitchhikersGuideToTheGalaxy-  | Hobbit-  | House-  | HowIMetYourMother-  | IdNumber-  | IndustrySegments-  | Internet-  | Invoice-  | Job-  | Kpop-  | LeagueOfLegends-  | Lebowski-  | LordOfTheRings-  | Lorem-  | LoveCraft-  | Markdown-  | Marketing-  | Measurement-  | MichaelScott-  | Military-  | Movie-  | Music-  | Myst-  | Nation-  | NatoPhoneticAlphabet-  | NewGirl-  | OnePiece-  | Horse-  | OverWatch-  | ParksAndRec-  | Phish-  | PhoneNumber-  | Pokemon-  | PrincessBride-  | ProgrammingLanguage-  | Quote-  | Relationship-  | Restaurant-  | RickAndMorty-  | RockBand-  | Rupaul-  | Science-  | Seinfeld-  | Shakespeare-  | SiliconValley-  | Simpsons-  | SlackEmoji-  | SonicTheHedgehog-  | Source-  | SouthPark-  | Space-  | StarTrek-  | StarWars-  | StarGate-  | StrangerThings-  | Stripe-  | Subscription-  | SuperSmashBros-  | SuperHero-  | SwordArtOnline-  | Team-  | TheExpanse-  | TheItCrowd-  | TheThickOfIt-  | TwinPeaks-  | UmphreysMcgee-  | University-  | VForVendetta-  | Vehicle-  | VentureBros-  | Verbs-  | Witcher-  | WorldCup-  | WorldOfWarcraft-  | Yoda-  | Zelda-  | Opera-  | CustomSourceEnglish String- sourceFile :: SourceData -> FilePath sourceFile Address = "address" sourceFile Name = "name"@@ -518,7 +373,37 @@   -> (FakerSettings -> Value -> Parser a)   -> m a fetchData settings sdata parser = do-  let fname = guessSourceFile sdata (getLocale settings)-  afile <- getSourceFile fname-  yaml <- decodeFileThrow afile-  parseMonad (parser settings) yaml+  let locale = getLocale settings+      fname = guessSourceFile sdata locale+      ckey = CacheFileKey {cfkSource = sdata, cfkLocale = locale}+  cache <- liftIO $ getCacheFile settings+  case (HM.lookup ckey cache) of+    Nothing -> do+      afile <- getSourceFile fname+      bs <- liftIO $ BS.readFile afile+      yaml <- decodeThrow bs+      let nhash = HM.insert ckey yaml cache+      liftIO $ setCacheFile nhash settings+      parseMonad (parser settings) yaml+    Just yaml -> parseMonad (parser settings) yaml++fetchDataSingle ::+     (MonadThrow m, MonadIO m)+  => FakerSettings+  -> SourceData+  -> (FakerSettings -> Value -> Parser Text)+  -> m (Vector Text)+fetchDataSingle settings sdata parser = do+  let locale = getLocale settings+      fname = guessSourceFile sdata locale+      ckey = CacheFileKey {cfkSource = sdata, cfkLocale = locale}+  cache <- liftIO $ getCacheFile settings+  case (HM.lookup ckey cache) of+    Nothing -> do+      afile <- getSourceFile fname+      bs <- liftIO $ BS.readFile afile+      yaml <- decodeThrow bs+      let nhash = HM.insert ckey yaml cache+      liftIO $ setCacheFile nhash settings+      pure <$> parseMonad (parser settings) yaml+    Just yaml -> pure <$> parseMonad (parser settings) yaml
src/Faker.hs view
@@ -2,6 +2,7 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE InstanceSigs #-}+{-# LANGUAGE BangPatterns #-}  module Faker   (@@ -15,10 +16,16 @@   , setRandomGen   , setDeterministic   , setNonDeterministic+  , setCacheField+  , setCacheFile+  , replaceCacheField+  , replaceCacheFile     -- * Getters   , getRandomGen   , getLocale   , getDeterministic+  , getCacheField+  , getCacheFile     -- * Generators   , generate   , generateWithSettings@@ -27,23 +34,38 @@ import Control.Exception (Exception) import Control.Monad (ap) import Control.Monad.IO.Class+import qualified Data.HashMap.Strict as HM+import Data.IORef import Data.Text (Text) import Data.Typeable-import System.Random (StdGen, mkStdGen, newStdGen, split)+import Data.Vector (Vector)+import Data.Yaml (Value)+import Data.Word (Word64)+import Faker.Internal.Types (CacheFieldKey, CacheFileKey)+import System.Random (StdGen, newStdGen, split, mkStdGen) -data FakerSettings = FakerSettings-  { fslocale :: Text -- ^ Locale settings for your fake data source.-  , fsrandomGen :: StdGen -- ^ Standard random generator-  , fsDeterministic :: Bool -- ^ Controls whether you want+data FakerSettings =+  FakerSettings+    { fslocale :: !Text -- ^ Locale settings for your fake data source.+    , fsrandomGen :: !StdGen -- ^ Seed to initialize random generator state+    , fsDeterministic :: !Bool -- ^ Controls whether you want                             -- deterministic out. This overrides-                            -- fsrandomGen.-  } deriving (Show)+                            -- 'fsrandomGen'.+    , fsCacheField :: (IORef (HM.HashMap CacheFieldKey (Vector Text)))+    , fsCacheFile :: (IORef (HM.HashMap CacheFileKey Value))+    } +newtype FakerGen = FakerGen { unFakerGen :: (Int, StdGen)} deriving (Show)++instance Show FakerSettings where+  show (FakerSettings {..}) =+    show fslocale ++ show fsrandomGen ++ show fsDeterministic+ data FakerException   = InvalidLocale String -- ^ This is thrown when it is not able to                          -- find the fake data source for your                          -- localization.-  | InvalidField String Text -- ^ The 'String' represents the field is+  | InvalidField String Text -- ^ The 'String' represents the field it is                              -- trying to resolve and the 'Text' field                              -- is something you passed on.   | NoDataFound FakerSettings -- ^ This is thrown when you have no@@ -57,7 +79,12 @@ defaultFakerSettings :: FakerSettings defaultFakerSettings =   FakerSettings-    {fslocale = "en", fsrandomGen = (mkStdGen 10000), fsDeterministic = True}+    { fslocale = "en"+    , fsrandomGen = mkStdGen 10000+    , fsDeterministic = True+    , fsCacheField = error "defaultFakerSettings: fsCacheField not initialized"+    , fsCacheFile = error "defaultFakerSettings: fsCacheFile not initialized"+    }  -- | Sets the locale. Note that for any other locale apart from -- \"en\", you need to make sure that the data is acutally present. In@@ -68,11 +95,11 @@ setLocale :: Text -> FakerSettings -> FakerSettings setLocale localeTxt fs = fs {fslocale = localeTxt} --- | Sets the random generator+-- | Sets the initial gen for random generator setRandomGen :: StdGen -> FakerSettings -> FakerSettings setRandomGen gen fs = fs {fsrandomGen = gen} --- | Get the random generator+-- | Get the initial gen for random generator getRandomGen :: FakerSettings -> StdGen getRandomGen settings = fsrandomGen settings @@ -92,7 +119,6 @@ -- λ> generateWithSettings (setDeterministic defaultFakerSettings) FN.name -- "Antony Langosh" -- @- setDeterministic :: FakerSettings -> FakerSettings setDeterministic fs = fs {fsDeterministic = True} @@ -105,7 +131,6 @@ -- λ> generateWithSettings (setNonDeterministic defaultFakerSettings) FN.name -- "Rudy Dickinson II" -- @- setNonDeterministic :: FakerSettings -> FakerSettings setNonDeterministic fs = fs {fsDeterministic = False} @@ -114,11 +139,38 @@ getDeterministic :: FakerSettings -> Bool getDeterministic FakerSettings {..} = fsDeterministic +getCacheField :: FakerSettings -> IO (HM.HashMap CacheFieldKey (Vector Text))+getCacheField FakerSettings {..} = readIORef fsCacheField++setCacheField ::+     HM.HashMap CacheFieldKey (Vector Text) -> FakerSettings -> IO ()+setCacheField cache fs = do+  writeIORef (fsCacheField fs) cache++replaceCacheField ::+     HM.HashMap CacheFieldKey (Vector Text) -> FakerSettings -> IO FakerSettings+replaceCacheField cache fs = do+  ref <- newIORef cache+  pure $ fs {fsCacheField = ref}++getCacheFile :: FakerSettings -> IO (HM.HashMap CacheFileKey Value)+getCacheFile FakerSettings {..} = readIORef fsCacheFile++setCacheFile :: HM.HashMap CacheFileKey Value -> FakerSettings -> IO ()+setCacheFile cache fs = writeIORef (fsCacheFile fs) cache++replaceCacheFile ::+     HM.HashMap CacheFileKey Value -> FakerSettings -> IO FakerSettings+replaceCacheFile cache fs = do+  ref <- newIORef cache+  pure $ fs {fsCacheFile = ref}+ -- | Fake data type. This is the type you will be using to produce -- fake values.-newtype Fake a = Fake-  { unFake :: FakerSettings -> IO a-  }+newtype Fake a =+  Fake+    { unFake :: FakerSettings -> IO a+    }  instance Functor Fake where   fmap :: (a -> b) -> Fake a -> Fake b@@ -160,7 +212,10 @@ -- "Antony Langosh" -- @ generate :: Fake a -> IO a-generate (Fake f) = f defaultFakerSettings+generate (Fake f) = do+  cacheField <- newIORef HM.empty+  cacheFile <- newIORef HM.empty+  f $ defaultFakerSettings {fsCacheField = cacheField, fsCacheFile = cacheFile}  -- | Generate fake value with supplied 'FakerSettings' --@@ -176,4 +231,6 @@       then pure $ getRandomGen settings       else newStdGen   let newSettings = setRandomGen stdGen settings-  f newSettings+  cacheField <- newIORef HM.empty+  cacheFile <- newIORef HM.empty+  f $ newSettings {fsCacheField = cacheField, fsCacheFile = cacheFile}
src/Faker/Address.hs view
@@ -1,73 +1,107 @@+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TemplateHaskell #-}+ module Faker.Address where -import Data.Text-import Faker-import Faker.Internal+import Data.Text (Text)+import Faker (Fake(..))+import Faker.Internal (cachedRandomUnresolvedVec, cachedRandomVec) import Faker.Provider.Address+import Faker.TH  country :: Fake Text-country = Fake (\settings -> randomVec settings countriesProvider)+country = Fake (cachedRandomVec "address" "country" countryProvider) -cityPrefix :: Fake Text-cityPrefix = Fake (\settings -> randomVec settings cityPrefixProvider)+$(generateFakeField "address" "cityPrefix")  citySuffix :: Fake Text-citySuffix = Fake (\settings -> randomVec settings citySuffixProvider)+citySuffix = Fake (cachedRandomVec "address" "citySuffix" citySuffixProvider)  countryCode :: Fake Text-countryCode = Fake (\settings -> randomVec settings countryCodeProvider)+countryCode = Fake (cachedRandomVec "address" "citySuffix" countryCodeProvider)  countryCodeLong :: Fake Text-countryCodeLong = Fake (\settings -> randomVec settings countryCodeLongProvider)+countryCodeLong =+  Fake (cachedRandomVec "address" "citySuffix" countryCodeLongProvider)  buildingNumber :: Fake Text buildingNumber =   Fake-    (\settings ->-       randomUnresolvedVec settings buildingNumberProvider resolveAddressText)+    (cachedRandomUnresolvedVec+       "address"+       "buildingNumber"+       buildingNumberProvider+       resolveAddressText)  communityPrefix :: Fake Text-communityPrefix = Fake (\settings -> randomVec settings communityPrefixProvider)+communityPrefix =+  Fake (cachedRandomVec "address" "communityPrefix" communityPrefixProvider)  communitySuffix :: Fake Text-communitySuffix = Fake (\settings -> randomVec settings communitySuffixProvider)+communitySuffix =+  Fake (cachedRandomVec "address" "communitySuffix" communitySuffixProvider) -community :: Fake Text-community =-  Fake-    (\settings ->-       randomUnresolvedVec settings communityProvider resolveAddressText)+$(generateFakeFieldUnresolved "address" "community")  streetSuffix :: Fake Text-streetSuffix = Fake (\settings -> randomVec settings streetSuffixProvider)+streetSuffix =+  Fake (cachedRandomVec "address" "streetSuffix" streetSuffixProvider)  secondaryAddress :: Fake Text secondaryAddress =   Fake-    (\settings ->-       randomUnresolvedVec settings secondaryAddressProvider resolveAddressText)-+    (cachedRandomUnresolvedVec+       "address"+       "secondaryAddress"+       secondaryAddressProvider+       resolveAddressText)  postcode :: Fake Text-postcode = Fake (unresolvedResolver postcodeProvider resolveAddressText)+postcode =+  Fake+    (cachedRandomUnresolvedVec+       "address"+       "postcode"+       postcodeProvider+       resolveAddressText)  state :: Fake Text-state = Fake (resolver stateProvider)+state = Fake (cachedRandomVec "address" "state" stateProvider)  stateAbbr :: Fake Text-stateAbbr = Fake (resolver stateAbbrProvider)+stateAbbr = Fake (cachedRandomVec "address" "stateAbbr" stateAbbrProvider)  timeZone :: Fake Text-timeZone = Fake (resolver timeZoneProvider)+timeZone = Fake (cachedRandomVec "address" "timeZone" timeZoneProvider)  city :: Fake Text-city = Fake (unresolvedResolver cityProvider resolveAddressText)+city =+  Fake+    (cachedRandomUnresolvedVec "address" "city" cityProvider resolveAddressText)  streetName :: Fake Text-streetName = Fake (unresolvedResolver streetNameProvider resolveAddressText)+streetName =+  Fake+    (cachedRandomUnresolvedVec+       "address"+       "streetName"+       streetNameProvider+       resolveAddressText)  streetAddress :: Fake Text-streetAddress = Fake (unresolvedResolver streetAddressProvider resolveAddressText)+streetAddress =+  Fake+    (cachedRandomUnresolvedVec+       "address"+       "streetAddress"+       streetAddressProvider+       resolveAddressText)  fullAddress :: Fake Text-fullAddress = Fake $ unresolvedResolver fullAddressProvider resolveAddressText+fullAddress =+  Fake+    (cachedRandomUnresolvedVec+       "address"+       "fullAddress"+       fullAddressProvider+       resolveAddressText)
src/Faker/Ancient.hs view
@@ -1,18 +1,20 @@+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}+ module Faker.Ancient where -import Data.Text-import Faker-import Faker.Internal+import Data.Text (Text)+import Faker (Fake(..)) import Faker.Provider.Ancient+import Faker.TH -god :: Fake Text-god = Fake (\settings -> randomVec settings ancientGodProvider)+$(generateFakeField "ancient" "god") -primordial :: Fake Text-primordial = Fake (\settings -> randomVec settings ancientPrimordialProvider)+$(generateFakeField "ancient" "primordial") -titan :: Fake Text-titan = Fake (\settings -> randomVec settings ancientTitanProvider)+$(generateFakeField "ancient" "hero") -hero :: Fake Text-hero = Fake (\settings -> randomVec settings ancientHeroProvider)+$(generateFakeField "ancient" "titan")+++
src/Faker/App.hs view
@@ -1,9 +1,10 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.App where -import Data.Text-import Faker+import Data.Text (Text)+import Faker (Fake(..)) import Faker.Internal import Faker.Provider.App import Faker.TH
src/Faker/Appliance.hs view
@@ -1,12 +1,13 @@+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}+ module Faker.Appliance where -import Data.Text-import Faker-import Faker.Internal+import Data.Text (Text)+import Faker (Fake(..)) import Faker.Provider.Appliance+import Faker.TH -brand :: Fake Text-brand = Fake $ resolver applianceBrandProvider+$(generateFakeField "appliance" "brand") -appliance :: Fake Text-appliance = Fake $ resolver applianceBrandProvider+$(generateFakeField "appliance" "equipment")
src/Faker/Artist.hs view
@@ -1,9 +1,14 @@+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}+ module Faker.Artist where -import Data.Text-import Faker-import Faker.Internal+import Data.Text (Text)+import Faker (Fake(..)) import Faker.Provider.Artist+import Faker.TH -name :: Fake Text-name = Fake $ resolver artistNameProvider+$(generateFakeField "artist" "names")+++
src/Faker/Bank.hs view
@@ -1,12 +1,13 @@+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}+ module Faker.Bank where -import Data.Text-import Faker-import Faker.Internal+import Data.Text (Text)+import Faker (Fake(..)) import Faker.Provider.Bank+import Faker.TH -name :: Fake Text-name = Fake $ resolver bankNameProvider+$(generateFakeField "bank" "name") -swiftBic :: Fake Text-swiftBic = Fake $ resolver swiftBicProvider+$(generateFakeField "bank" "swift_bic")
src/Faker/Beer.hs view
@@ -1,24 +1,21 @@+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}+ module Faker.Beer where -import Data.Text-import Faker-import Faker.Internal+import Data.Text (Text)+import Faker (Fake(..)) import Faker.Provider.Beer+import Faker.TH -name :: Fake Text-name = Fake $ resolver beerNameProvider+$(generateFakeField "beer" "name") -brand :: Fake Text-brand = Fake $ resolver beerBrandProvider+$(generateFakeField "beer" "brand") -hop :: Fake Text-hop = Fake $ resolver beerHopProvider+$(generateFakeField "beer" "hop") -yeast :: Fake Text-yeast = Fake $ resolver beerYeastProvider+$(generateFakeField "beer" "yeast") -malt :: Fake Text-malt = Fake $ resolver beerMaltProvider+$(generateFakeField "beer" "malt") -style :: Fake Text-style = Fake $ resolver beerStyleProvider+$(generateFakeField "beer" "style")
src/Faker/Book.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Book where @@ -12,7 +13,12 @@  author :: Fake Text author =-  Fake (unresolvedResolverWithoutVector bookAuthorProvider resolveBookText)+  Fake+    (cachedRandomUnresolvedVecWithoutVector+       "book"+       "author"+       bookAuthorProvider+       resolveBookText)  $(generateFakeField "book" "publisher") 
src/Faker/Book/CultureSeries.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Book.CultureSeries where 
src/Faker/Book/Dune.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Book.Dune where 
src/Faker/Book/Lovecraft.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Book.Lovecraft where 
src/Faker/BossaNova.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.BossaNova where 
src/Faker/Business.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Business where 
src/Faker/Cannabis.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Cannabis where @@ -25,3 +26,6 @@ $(generateFakeField "cannabis" "types")  $(generateFakeField "cannabis" "buzzwords")++-- | @since 0.3.0+$(generateFakeField "cannabis" "brands")
src/Faker/ChuckNorris.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.ChuckNorris where 
src/Faker/Code.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Code where 
src/Faker/Coffee.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Coffee where @@ -18,17 +19,32 @@  $(generateFakeField "coffee" "descriptor") -$(generateFakeField "coffee" "notes")+notes :: Fake Text+notes =+  Fake+    (cachedRandomUnresolvedVecWithoutVector+       "coffee"+       "notes"+       coffeeNotesProvider+       resolveCoffeeText)  $(generateFakeField "coffee" "name_1")  $(generateFakeField "coffee" "name_2") -$(generateFakeFieldUnresolved "coffee" "blend_name")+blendName :: Fake Text+blendName =+  Fake+    (cachedRandomUnresolvedVecWithoutVector+       "coffee"+       "blendName"+       coffeeBlendNameProvider+       resolveCoffeeText)  regionsColombia :: Fake Text regionsColombia =-  Fake (\settings -> randomVec settings coffeeRegionsColombiaProvider)+  Fake+    (cachedRandomVec "coffee" "regionsColumbia" coffeeRegionsColombiaProvider)  $(generateFakeFields "coffee" ["regions", "brazil"]) 
src/Faker/Coin.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Coin where 
src/Faker/Color.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Color where 
src/Faker/Commerce.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Commerce where 
src/Faker/Company.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-}  module Faker.Company where@@ -27,7 +28,7 @@ bs =   Fake     (\settings -> do-       vec <- companyBsProvider settings+       vec :: V.Vector (V.Vector Text) <- companyBsProvider settings        let item :: V.Vector (IO Text) = V.map (\v -> rvec settings v) vec            item' :: IO (V.Vector Text) = sequence item        items <- item'
src/Faker/Compass.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Compass where 
src/Faker/Construction.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  -- | @since 0.2.0 module Faker.Construction where
src/Faker/Cosmere.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Cosmere where 
src/Faker/Creature/Animal.hs view
@@ -1,9 +1,12 @@+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}+ module Faker.Creature.Animal where  import Data.Text import Faker import Faker.Internal import Faker.Provider.Animal+import Faker.TH -name :: Fake Text-name = Fake (\settings -> randomVec settings animalProvider)+$(generateFakeField "animal" "name")
src/Faker/Creature/Cat.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Creature.Cat where 
src/Faker/Creature/Dog.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Creature.Dog where 
src/Faker/Creature/Horse.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  -- | @since 0.2.0 module Faker.Creature.Horse where
src/Faker/CryptoCoin.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.CryptoCoin where 
src/Faker/Currency.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Currency where 
src/Faker/DcComics.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.DcComics where 
src/Faker/Demographic.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Demographic where 
src/Faker/Dessert.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Dessert where 
src/Faker/Educator.hs view
@@ -1,4 +1,6 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Educator where 
src/Faker/ElectricalComponents.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.ElectricalComponents where 
src/Faker/Esport.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Esport where 
src/Faker/File.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.File where 
src/Faker/Finance.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Finance where 
src/Faker/Food.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Food where 
− src/Faker/Football.hs
@@ -1,20 +0,0 @@-{-# LANGUAGE TemplateHaskell #-}---- | @since 0.2.0-module Faker.Football where--import Data.Text-import Faker-import Faker.Internal-import Faker.Provider.Football-import Faker.TH--$(generateFakeField "football" "teams")--$(generateFakeField "football" "players")--$(generateFakeField "football" "coaches")--$(generateFakeField "football" "competitions")--$(generateFakeField "football" "positions")
src/Faker/FunnyName.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.FunnyName where @@ -8,11 +9,4 @@ import Faker.Provider.FunnyName import Faker.TH - $(generateFakeField "funnyName" "name")------
src/Faker/Game/Dota.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Game.Dota where @@ -38,7 +39,7 @@  $(generateFakeFields "dota" ["dragon_knight", "quote"]) -$(generateFakeFields "dota" ["earth_knight", "quote"])+$(generateFakeFields "dota" ["earth_spirit", "quote"])  $(generateFakeFields "dota" ["earthshaker", "quote"]) 
src/Faker/Game/ElderScrolls.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Game.ElderScrolls where 
src/Faker/Game/Fallout.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Game.Fallout where 
src/Faker/Game/HalfLife.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Game.HalfLife where 
src/Faker/Game/Heroes.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Game.Heroes where 
src/Faker/Game/HeroesOfTheStorm.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Game.HeroesOfTheStorm where 
src/Faker/Game/Myst.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Game.Myst where 
src/Faker/Game/Overwatch.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Game.Overwatch where 
src/Faker/Game/Pokemon.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Game.Pokemon where 
src/Faker/Game/SonicTheHedgehog.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Game.SonicTheHedgehog where 
src/Faker/Game/SuperSmashBros.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Game.SuperSmashBros where 
src/Faker/Game/Witcher.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Game.Witcher where 
src/Faker/Game/WorldOfWarcraft.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Game.WorldOfWarcraft where 
src/Faker/Game/Zelda.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Game.Zelda where 
src/Faker/Gender.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Gender where @@ -8,13 +9,6 @@ import Faker.Provider.Gender import Faker.TH - $(generateFakeField "gender" "types")  $(generateFakeField "gender" "binary_types")------
src/Faker/GreekPhilosophers.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.GreekPhilosophers where @@ -8,13 +9,6 @@ import Faker.Provider.GreekPhilosophers import Faker.TH - $(generateFakeField "greekPhilosophers" "names")  $(generateFakeField "greekPhilosophers" "quotes")------
src/Faker/Hacker.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Hacker where @@ -8,7 +9,6 @@ import Faker.Provider.Hacker import Faker.TH - $(generateFakeField "hacker" "abbreviation")  $(generateFakeField "hacker" "adjective")@@ -18,9 +18,3 @@ $(generateFakeField "hacker" "verb")  $(generateFakeField "hacker" "ingverb")------
src/Faker/Hipster.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Hipster where @@ -8,11 +9,4 @@ import Faker.Provider.Hipster import Faker.TH - $(generateFakeField "hipster" "words")------
src/Faker/House.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.House where @@ -8,13 +9,6 @@ import Faker.Provider.House import Faker.TH - $(generateFakeField "house" "furniture")  $(generateFakeField "house" "rooms")------
src/Faker/IndustrySegments.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.IndustrySegments where @@ -8,7 +9,6 @@ import Faker.Provider.IndustrySegments import Faker.TH - $(generateFakeField "industrySegments" "industry")  $(generateFakeField "industrySegments" "super_sector")@@ -16,9 +16,3 @@ $(generateFakeField "industrySegments" "sector")  $(generateFakeField "industrySegments" "sub_sector")------
src/Faker/Internal.hs view
@@ -3,22 +3,47 @@ {-# LANGUAGE DeriveFunctor #-}  -- | Internal module-module Faker.Internal where+module Faker.Internal+  ( Unresolved(..)+  , rvec+  , insertToCache+  , presentInCache+  , resolver+  , refinedString+  , refinedText+  , operateFields+  , resolveFields+  , cachedRandomVec+  , cachedRandomUnresolvedVec+  , cachedRandomUnresolvedVecWithoutVector+  , interpolateNumbers+  , interpolateString+  , resolveUnresolved+  , uncons2+  , operateField+  , modifyRandomGen+  ) where +import Config import Control.Monad.Catch import Control.Monad.IO.Class import Data.Char (toUpper)+import qualified Data.HashMap.Strict as HM import Data.Monoid ((<>)) import qualified Data.Text as T import Data.Text (Text, strip) import qualified Data.Vector as V import Data.Vector (Vector, (!))+import Data.Word (Word64) import Faker-import System.Random+import Faker.Internal.Types (CacheFieldKey(..))+import System.Random (StdGen, mkStdGen, randomR, split) -newtype Unresolved a = Unresolved-  { unresolvedField :: a-  } deriving (Functor)+newtype Unresolved a =+  Unresolved+    { unresolvedField :: a+    }+  deriving (Functor)  instance Applicative Unresolved where   pure = Unresolved@@ -28,6 +53,8 @@   return = pure   (Unresolved f) >>= f1 = f1 f +-- These are the functions which needs to be remodified+-- rvec, randomVec, randomUnresolvedvec, randomUnresolvedVecwithoutvector, unresolvedResolver, unresolfvedResolverWithoutVector rvec :: (MonadThrow m, MonadIO m) => FakerSettings -> Vector a -> m a rvec settings vec =   let itemsLen = V.length vec@@ -36,6 +63,22 @@         then throwM $ NoDataFound settings         else pure $ vec ! index +cachedRandomVec ::+     (MonadThrow m, MonadIO m)+  => Text+  -> Text+  -> (FakerSettings -> m (Vector Text))+  -> FakerSettings+  -> m Text+cachedRandomVec sdata field provider settings = do+  val <- liftIO $ presentInCache sdata field settings+  case val of+    Nothing -> do+      dat <- provider settings+      liftIO $ insertToCache sdata field settings dat+      randomVec settings (\_ -> pure dat)+    Just vec -> randomVec settings (\_ -> pure vec)+ randomVec ::      (MonadThrow m, MonadIO m)   => FakerSettings@@ -50,6 +93,25 @@     then throwM $ NoDataFound settings     else pure $ items ! index +cachedRandomUnresolvedVec ::+     (MonadThrow m, MonadIO m)+  => Text+  -> Text+  -> (FakerSettings -> m (Unresolved (Vector Text)))+  -> (FakerSettings -> Text -> m Text)+  -> FakerSettings+  -> m Text+cachedRandomUnresolvedVec sdata field provider resolverFn settings = do+  val <- liftIO $ presentInCache sdata field settings+  case val of+    Nothing -> do+      dat <- provider settings+      liftIO $ insertToCache sdata field settings (unresolvedField dat)+      resolveUnresolved settings dat resolverFn+    Just vec -> do+      let unres = Unresolved {unresolvedField = vec}+      randomUnresolvedVec settings (\_ -> pure unres) resolverFn+ randomUnresolvedVec ::      (MonadThrow m, MonadIO m)   => FakerSettings@@ -60,6 +122,25 @@   items <- provider settings   resolveUnresolved settings items resolverFn +cachedRandomUnresolvedVecWithoutVector ::+     (MonadThrow m, MonadIO m)+  => Text+  -> Text+  -> (FakerSettings -> m (Unresolved Text))+  -> (FakerSettings -> Text -> m Text)+  -> FakerSettings+  -> m Text+cachedRandomUnresolvedVecWithoutVector sdata field provider resolverFn settings = do+  val <- liftIO $ presentInCache sdata field settings+  case val of+    Nothing -> do+      dat <- provider settings+      liftIO $ insertToCache sdata field settings (pure $ unresolvedField dat)+      resolveUnresolved settings (sequenceA $ pure dat) resolverFn+    Just vec -> do+      let unres = Unresolved {unresolvedField = vec}+      randomUnresolvedVec settings (\_ -> pure unres) resolverFn+ randomUnresolvedVecWithoutVector ::      (MonadThrow m, MonadIO m)   => FakerSettings@@ -186,6 +267,7 @@ interpolateString :: FakerSettings -> Text -> Text interpolateString fsettings text = helper fsettings [] text   where+    helper :: FakerSettings -> [Char] -> Text -> Text     helper settings acc txt =       case T.null txt of         True -> T.pack acc@@ -204,9 +286,9 @@  resolver ::      (MonadThrow m, MonadIO m)-  => (FakerSettings -> m (Vector Text))+  => (FakerSettings -> m (Vector a))   -> FakerSettings-  -> m Text+  -> m a resolver provider = \settings -> randomVec settings provider  unresolvedResolver ::@@ -244,3 +326,34 @@  refinedText :: Text -> Text refinedText = T.pack . refinedString . T.unpack++presentInCache :: Text -> Text -> FakerSettings -> IO (Maybe (Vector Text))+presentInCache sdata field settings = do+  let key =+        CacheFieldKey+          {ckSource = sdata, ckLocale = getLocale settings, ckField = field}+  hmap <- getCacheField settings+  pure $ HM.lookup key hmap++insertToCache :: Text -> Text -> FakerSettings -> (Vector Text) -> IO ()+insertToCache sdata field settings vec = do+  let key =+        CacheFieldKey+          {ckSource = sdata, ckLocale = getLocale settings, ckField = field}+  hmap <- getCacheField settings+  let hmap2 = HM.insert key vec hmap+  setCacheField hmap2 settings++-- TODO: Not efficient. Better to switch to splitmax once this gets+-- resolved: https://github.com/phadej/splitmix/issues/23+incrementStdGen :: Word64 -> StdGen -> StdGen+incrementStdGen 0 gen = gen+incrementStdGen n gen =+  let (_, newGen) = split gen+   in incrementStdGen (n - 1) newGen++modifyRandomGen :: FakerSettings -> Word64 -> FakerSettings+modifyRandomGen settings seed =+  let gen = getRandomGen settings+      newGen = incrementStdGen seed gen+   in setRandomGen newGen settings
+ src/Faker/Internal/Types.hs view
@@ -0,0 +1,174 @@+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DeriveAnyClass #-}++module Faker.Internal.Types where++import Data.Hashable+import Data.Text (Text)+import GHC.Generics++data SourceData+  = Address+  | Name+  | Ancient+  | Animal+  | App+  | Appliance+  | ATHF+  | Artist+  | Basketball+  | BTTF+  | Bank+  | Beer+  | BoJackHorseman+  | Book+  | BossaNova+  | BreakingBad+  | Buffy+  | Business+  | Cannabis+  | Cat+  | ChuckNorris+  | Code+  | Coffee+  | Coin+  | Color+  | Commerce+  | Community+  | Company+  | Construction+  | Cosmere+  | Compass+  | CryptoCoin+  | CultureSeries+  | Currency+  | DcComics+  | Demographic+  | Dessert+  | Device+  | Dog+  | Dota+  | DrWho+  | DragonBall+  | DumbAndDumber+  | Dune+  | Educator+  | ElderScrolls+  | ElectricalComponents+  | Esport+  | Fallout+  | FamilyGuy+  | File+  | Finance+  | Food+  | Football+  | FreshPrinceOfBelAir+  | Friends+  | FunnyName+  | GameOfThrones+  | Gender+  | GhostBusters+  | GratefulDead+  | GreekPhilosophers+  | Hacker+  | HalfLife+  | HarryPotter+  | Heroes+  | HeroesOfTheStorm+  | HeyArnold+  | Hipster+  | HitchhikersGuideToTheGalaxy+  | Hobbit+  | House+  | HowIMetYourMother+  | IdNumber+  | IndustrySegments+  | Internet+  | Invoice+  | Job+  | Kpop+  | LeagueOfLegends+  | Lebowski+  | LordOfTheRings+  | Lorem+  | LoveCraft+  | Markdown+  | Marketing+  | Measurement+  | MichaelScott+  | Military+  | Movie+  | Music+  | Myst+  | Nation+  | NatoPhoneticAlphabet+  | NewGirl+  | OnePiece+  | Horse+  | OverWatch+  | ParksAndRec+  | Phish+  | PhoneNumber+  | Pokemon+  | PrincessBride+  | ProgrammingLanguage+  | Quote+  | Relationship+  | Restaurant+  | RickAndMorty+  | RockBand+  | Rupaul+  | Science+  | Seinfeld+  | Shakespeare+  | SiliconValley+  | Simpsons+  | SlackEmoji+  | SonicTheHedgehog+  | Source+  | SouthPark+  | Space+  | StarTrek+  | StarWars+  | StarGate+  | StrangerThings+  | Stripe+  | Subscription+  | SuperSmashBros+  | SuperHero+  | SwordArtOnline+  | Team+  | TheExpanse+  | TheItCrowd+  | TheThickOfIt+  | TwinPeaks+  | UmphreysMcgee+  | University+  | VForVendetta+  | Vehicle+  | VentureBros+  | Verbs+  | Witcher+  | WorldCup+  | WorldOfWarcraft+  | Yoda+  | Zelda+  | Opera+  | CustomSourceEnglish String+  deriving (Show, Eq, Ord, Generic, Hashable)++data CacheFieldKey =+  CacheFieldKey+    { ckSource :: !Text+    , ckField :: !Text+    , ckLocale :: !Text+    }+  deriving (Show, Eq, Ord, Generic, Hashable)++data CacheFileKey =+  CacheFileKey+    { cfkSource :: !SourceData+    , cfkLocale :: !Text+    }+  deriving (Show, Eq, Ord, Generic, Hashable)
src/Faker/Internet.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Internet where 
src/Faker/JapaneseMedia/DragonBall.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.JapaneseMedia.DragonBall where 
src/Faker/JapaneseMedia/OnePiece.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.JapaneseMedia.OnePiece where 
src/Faker/JapaneseMedia/SwordArtOnline.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.JapaneseMedia.SwordArtOnline where 
src/Faker/Job.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Job where @@ -9,7 +10,7 @@ import Faker.TH  field :: Fake Text-field = Fake (resolver jobField2Provider)+field = Fake (cachedRandomVec "job" "field" jobField2Provider)  $(generateFakeField "job" "seniority") 
src/Faker/Kpop.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Kpop where @@ -8,7 +9,6 @@ import Faker.Provider.Kpop import Faker.TH - $(generateFakeField "kpop" "i_groups")  $(generateFakeField "kpop" "ii_groups")@@ -20,9 +20,3 @@ $(generateFakeField "kpop" "boy_bands")  $(generateFakeField "kpop" "solo")------
src/Faker/LeagueOfLegends.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.LeagueOfLegends where @@ -8,7 +9,6 @@ import Faker.Provider.LeagueOfLegends import Faker.TH - $(generateFakeField "leagueOfLegends" "champion")  $(generateFakeField "leagueOfLegends" "location")@@ -20,9 +20,3 @@ $(generateFakeField "leagueOfLegends" "masteries")  $(generateFakeField "leagueOfLegends" "rank")------
src/Faker/Lorem.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Lorem where @@ -8,13 +9,6 @@ import Faker.Provider.Lorem import Faker.TH - $(generateFakeField "lorem" "words")  $(generateFakeField "lorem" "supplemental")------
src/Faker/Markdown.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Markdown where @@ -8,13 +9,6 @@ import Faker.Provider.Markdown import Faker.TH - $(generateFakeField "markdown" "headers")  $(generateFakeField "markdown" "emphasis")------
src/Faker/Marketing.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Marketing where @@ -8,11 +9,4 @@ import Faker.Provider.Marketing import Faker.TH - $(generateFakeField "marketing" "buzzwords")------
src/Faker/Measurement.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Measurement where @@ -8,7 +9,6 @@ import Faker.Provider.Measurement import Faker.TH - $(generateFakeField "measurement" "height")  $(generateFakeField "measurement" "length")@@ -24,9 +24,3 @@ $(generateFakeField "measurement" "metric_volume")  $(generateFakeField "measurement" "metric_weight")------
src/Faker/Military.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Military where @@ -8,7 +9,6 @@ import Faker.Provider.Military import Faker.TH - $(generateFakeField "military" "army_rank")  $(generateFakeField "military" "marines_rank")@@ -18,9 +18,3 @@ $(generateFakeField "military" "air_force_rank")  $(generateFakeField "military" "dod_paygrade")------
src/Faker/Movie.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Movie where 
src/Faker/Movie/BackToTheFuture.hs view
@@ -1,15 +1,15 @@+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}+ module Faker.Movie.BackToTheFuture where -import Data.Text-import Faker-import Faker.Internal+import Data.Text (Text)+import Faker (Fake(..)) import Faker.Provider.BackToTheFuture+import Faker.TH -character :: Fake Text-character = Fake (\settings -> randomVec settings bttfCharacterProvider)+$(generateFakeField "backToTheFuture" "dates") -date :: Fake Text-date = Fake (\settings -> randomVec settings bttfDatesProvider)+$(generateFakeField "backToTheFuture" "characters") -quote :: Fake Text-quote = Fake (\settings -> randomVec settings bttfQuoteProvider)+$(generateFakeField "backToTheFuture" "quotes")
src/Faker/Movie/Ghostbusters.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Movie.Ghostbusters where 
src/Faker/Movie/GratefulDead.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Movie.GratefulDead where 
src/Faker/Movie/HarryPotter.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Movie.HarryPotter where 
src/Faker/Movie/HitchhikersGuideToTheGalaxy.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Movie.HitchhikersGuideToTheGalaxy where 
src/Faker/Movie/Hobbit.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Movie.Hobbit where 
src/Faker/Movie/Lebowski.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Movie.Lebowski where 
src/Faker/Movie/LordOfTheRings.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Movie.LordOfTheRings where 
src/Faker/Movie/PrincessBride.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Movie.PrincessBride where 
src/Faker/Movie/StarWars.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Movie.StarWars where 
src/Faker/Movie/VForVendetta.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Movie.VForVendetta where 
src/Faker/Music.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Music where 
src/Faker/Music/Opera.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Music.Opera where 
src/Faker/Music/Phish.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Music.Phish where 
src/Faker/Music/RockBand.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Music.RockBand where 
src/Faker/Music/UmphreysMcgee.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Music.UmphreysMcgee where 
src/Faker/Name.hs view
@@ -1,24 +1,25 @@+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}+ module Faker.Name where -import Data.Text-import Faker-import Faker.Internal+import Data.Text (Text)+import Faker (Fake(..)) import Faker.Provider.Name+import Faker.TH -maleFirstName :: Fake Text-maleFirstName = Fake (\settings -> randomVec settings maleFirstNameProvider)+$(generateFakeField "name" "male_first_name") -femaleFirstName :: Fake Text-femaleFirstName = Fake (\settings -> randomVec settings femaleFirstNameProvider)+$(generateFakeField "name" "female_first_name") -prefix :: Fake Text-prefix = Fake (\settings -> randomVec settings prefixProvider)+$(generateFakeField "name" "prefix") -suffix :: Fake Text-suffix = Fake (\settings -> randomVec settings suffixProvider)+$(generateFakeField "name" "suffix") -name :: Fake Text-name = Fake (\settings -> randomUnresolvedVec settings nameProvider resolveNameText)+$(generateFakeField "name" "last_name") -nameWithMiddle :: Fake Text-nameWithMiddle = Fake (\settings -> randomUnresolvedVec settings nameWithMiddleProvider resolveNameText)+$(generateFakeFieldUnresolved "name" "name")++$(generateFakeFieldUnresolved "name" "name_with_middle")++$(generateFakeFieldUnresolved "name" "first_name")
src/Faker/Nation.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Nation where @@ -21,6 +22,6 @@ flagEmoji =   Fake     (\settings -> do-       vecword <- randomVec settings nationFlagEmojiProvider+       vecword <- resolver nationFlagEmojiProvider settings        let lword = V.toList vecword        pure $ TE.decodeUtf8 $ BS.pack lword)
src/Faker/NatoPhoneticAlphabet.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.NatoPhoneticAlphabet where @@ -8,11 +9,4 @@ import Faker.Provider.NatoPhoneticAlphabet import Faker.TH - $(generateFakeField "natoPhoneticAlphabet" "code_word")------
src/Faker/PhoneNumber.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.PhoneNumber where @@ -11,13 +12,14 @@ $(generateFakeFieldUnresolved "phoneNumber" "formats")  countryCode :: Fake Text-countryCode = Fake (\settings -> randomVec settings countryCodeProvider)+countryCode =+  Fake (cachedRandomVec "phoneNumber" "countryCode" countryCodeProvider)  cellPhoneFormat :: Fake Text cellPhoneFormat =   Fake-    (\settings ->-       randomUnresolvedVec-         settings-         cellPhoneFormatProvider-         resolvePhoneNumberText)+    (cachedRandomUnresolvedVec+       "phoneNumber"+       "cellPhoneFormat"+       cellPhoneFormatProvider+       resolvePhoneNumberText)
+ src/Faker/ProgrammingLanguage.hs view
@@ -0,0 +1,14 @@+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}++module Faker.ProgrammingLanguage where++import Data.Text+import Faker+import Faker.Internal+import Faker.Provider.ProgrammingLanguage+import Faker.TH++$(generateFakeField "programmingLauguage" "name")++$(generateFakeField "programmingLauguage" "creator")
− src/Faker/ProgrammingLauguage.hs
@@ -1,20 +0,0 @@-{-# LANGUAGE TemplateHaskell #-}--module Faker.ProgrammingLauguage where--import Data.Text-import Faker-import Faker.Internal-import Faker.Provider.ProgrammingLauguage-import Faker.TH---$(generateFakeField "programmingLauguage" "name")--$(generateFakeField "programmingLauguage" "creator")------
src/Faker/Provider/Address.hs view
@@ -126,13 +126,12 @@      (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser (Unresolved a) parseFullAddress settings = parseUnresolvedAddressField settings "full_address" -countriesProvider ::-     (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)-countriesProvider settings = fetchData settings Address parseCountry+countryProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)+countryProvider settings = fetchData settings Address parseCountry -cityPrefixProvider ::+addressCityPrefixProvider ::      (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)-cityPrefixProvider settings = fetchData settings Address parseCityPrefix+addressCityPrefixProvider settings = fetchData settings Address parseCityPrefix  citySuffixProvider ::      (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)@@ -173,6 +172,10 @@      (MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved (Vector Text)) communityProvider settings = fetchData settings Address parseCommunity +addressCommunityProvider ::+     (MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved (Vector Text))+addressCommunityProvider = communityProvider+ streetSuffixProvider ::      (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text) streetSuffixProvider settings = fetchData settings Address parseStreetSuffix@@ -225,38 +228,73 @@ resolveAddressText ::      (MonadIO m, MonadThrow m) => FakerSettings -> Text -> m Text resolveAddressText settings txt = do-  communityFields :: [Text] <- mapM (resolveAddressField settings) fields+  communityFields :: [Text] <-+    mapM+      (\(seed, field) ->+         resolveAddressField (modifyRandomGen settings seed) field)+      (zip [1 ..] fields)   pure $ operateFields txt communityFields   where     fields = resolveFields txt  resolveAddressField ::      (MonadThrow m, MonadIO m) => FakerSettings -> Text -> m Text-resolveAddressField settings "community_suffix" =-  randomVec settings communitySuffixProvider-resolveAddressField settings "community_prefix" =-  randomVec settings communityPrefixProvider-resolveAddressField settings "city_prefix" =-  randomVec settings cityPrefixProvider-resolveAddressField settings "Name.first_name" =+resolveAddressField settings field@"community_suffix" =+  cachedRandomVec "address" field communitySuffixProvider settings+resolveAddressField settings field@"community_prefix" =+  cachedRandomVec "address" field communityPrefixProvider settings+resolveAddressField settings field@"city_prefix" =+  cachedRandomVec "address" field addressCityPrefixProvider settings+resolveAddressField settings field@"Name.first_name" =   resolveNameField settings "first_name"-resolveAddressField settings "city_suffix" =-  randomVec settings citySuffixProvider-resolveAddressField settings "Name.last_name" =+resolveAddressField settings field@"city_suffix" =+  cachedRandomVec "address" field citySuffixProvider settings+resolveAddressField settings field@"Name.last_name" =   resolveNameField settings "last_name"-resolveAddressField settings "street_suffix" =-  randomVec settings streetSuffixProvider-resolveAddressField settings "building_number" =-  randomUnresolvedVec settings buildingNumberProvider resolveAddressText-resolveAddressField settings "street_name" =-  randomUnresolvedVec settings streetNameProvider resolveAddressText-resolveAddressField settings "street_address" =-  randomUnresolvedVec settings streetAddressProvider resolveAddressText-resolveAddressField settings "city" =-  randomUnresolvedVec settings cityProvider resolveAddressText-resolveAddressField settings "state_abbr" = randomVec settings stateAbbrProvider-resolveAddressField settings "zip_code" =-  randomUnresolvedVec settings postcodeProvider resolveAddressText-resolveAddressField settings "secondary_address" =-  randomUnresolvedVec settings secondaryAddressProvider resolveAddressText+resolveAddressField settings field@"street_suffix" =+  cachedRandomVec "address" field streetSuffixProvider settings+resolveAddressField settings field@"building_number" =+  cachedRandomUnresolvedVec+    "address"+    field+    buildingNumberProvider+    resolveAddressText+    settings+resolveAddressField settings field@"street_name" =+  cachedRandomUnresolvedVec+    "address"+    field+    streetNameProvider+    resolveAddressText+    settings+resolveAddressField settings field@"street_address" =+  cachedRandomUnresolvedVec+    "address"+    field+    streetAddressProvider+    resolveAddressText+    settings+resolveAddressField settings field@"city" =+  cachedRandomUnresolvedVec+    "address"+    field+    cityProvider+    resolveAddressText+    settings+resolveAddressField settings field@"state_abbr" =+  cachedRandomVec "address" field stateAbbrProvider settings+resolveAddressField settings field@"zip_code" =+  cachedRandomUnresolvedVec+    "address"+    field+    postcodeProvider+    resolveAddressText+    settings+resolveAddressField settings field@"secondary_address" =+  cachedRandomUnresolvedVec+    "address"+    field+    secondaryAddressProvider+    resolveAddressText+    settings resolveAddressField settings str = throwM $ InvalidField "address" str
src/Faker/Provider/Animal.hs view
@@ -18,7 +18,8 @@ parseAnimal settings (Object obj) = do   en <- obj .: (getLocale settings)   faker <- en .: "faker"-  animal <- faker .: "animal"+  creature <- faker .: "creature"+  animal <- creature .: "animal"   pure animal parseAnimal settings val = fail $ "expected Object, but got " <> (show val) @@ -32,5 +33,6 @@ parseAnimalName :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a parseAnimalName settings = parseAnimalField settings "name" -animalProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)-animalProvider settings = fetchData settings Animal parseAnimalName+animalNameProvider ::+     (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)+animalNameProvider settings = fetchData settings Animal parseAnimalName
src/Faker/Provider/App.hs view
@@ -13,7 +13,8 @@ import Data.Yaml import Faker import Faker.Internal-import Faker.Provider.Name (nameProvider, resolveNameText)+import Faker.Provider.Company (companyNameProvider, resolveCompanyText)+import Faker.Provider.Name (nameNameProvider, resolveNameText) import Faker.Provider.TH import Language.Haskell.TH @@ -58,11 +59,25 @@ resolveAppText :: (MonadIO m, MonadThrow m) => FakerSettings -> Text -> m Text resolveAppText settings txt = do   let fields = resolveFields txt-  appFields <- mapM (resolveAppField settings) fields+  appFields <-+    mapM+      (\(seed, field) -> resolveAppField (modifyRandomGen settings seed) field)+      (zip [1 ..] fields)   pure $ operateFields txt appFields  resolveAppField :: (MonadThrow m, MonadIO m) => FakerSettings -> Text -> m Text resolveAppField settings "Name.name" =-  randomUnresolvedVec settings nameProvider resolveNameText-resolveAppField settings "Company.name" = undefined+  cachedRandomUnresolvedVec+    "name"+    "name"+    nameNameProvider+    resolveNameText+    settings+resolveAppField settings "Company.name" =+  cachedRandomUnresolvedVec+    "company"+    "name"+    companyNameProvider+    resolveCompanyText+    settings resolveAppField settings str = throwM $ InvalidField "app" str
src/Faker/Provider/Artist.hs view
@@ -31,6 +31,6 @@ parseArtistNames :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a parseArtistNames settings = parseArtistField settings "names" -artistNameProvider ::+artistNamesProvider ::      (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)-artistNameProvider settings = fetchData settings Artist parseArtistNames+artistNamesProvider settings = fetchData settings Artist parseArtistNames
src/Faker/Provider/BackToTheFuture.hs view
@@ -1,51 +1,56 @@ {-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TemplateHaskell #-}  module Faker.Provider.BackToTheFuture where  import Config import Control.Monad.Catch-import Control.Monad.IO.Class-import Data.Map.Strict (Map) import Data.Monoid ((<>)) import Data.Text (Text) import Data.Vector (Vector) import Data.Yaml import Faker import Faker.Internal+import Faker.Provider.TH+import Language.Haskell.TH -parseBttf :: FromJSON a => FakerSettings -> Value -> Parser a-parseBttf settings (Object obj) = do+parseBackToTheFuture :: FromJSON a => FakerSettings -> Value -> Parser a+parseBackToTheFuture settings (Object obj) = do   en <- obj .: (getLocale settings)   faker <- en .: "faker"-  bttf <- faker .: "back_to_the_future"-  pure bttf-parseBttf settings val = fail $ "expected Object, but got " <> (show val)+  backToTheFuture <- faker .: "back_to_the_future"+  pure backToTheFuture+parseBackToTheFuture settings val =+  fail $ "expected Object, but got " <> (show val) -parseBttfField ::+parseBackToTheFutureField ::      (FromJSON a, Monoid a) => FakerSettings -> Text -> Value -> Parser a-parseBttfField settings txt val = do-  bttf <- parseBttf settings val-  field <- bttf .:? txt .!= mempty+parseBackToTheFutureField settings txt val = do+  backToTheFuture <- parseBackToTheFuture settings val+  field <- backToTheFuture .:? txt .!= mempty   pure field -parseBttfCharacter ::-     (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a-parseBttfCharacter settings = parseBttfField settings "characters"+parseBackToTheFutureFields ::+     (FromJSON a, Monoid a) => FakerSettings -> [Text] -> Value -> Parser a+parseBackToTheFutureFields settings txts val = do+  backToTheFuture <- parseBackToTheFuture settings val+  helper backToTheFuture txts+  where+    helper :: (FromJSON a) => Value -> [Text] -> Parser a+    helper a [] = parseJSON a+    helper (Object a) (x:xs) = do+      field <- a .: x+      helper field xs+    helper a (x:xs) = fail $ "expect Object, but got " <> (show a) -bttfCharacterProvider ::-     (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)-bttfCharacterProvider settings = fetchData settings BTTF parseBttfCharacter+$(genParser "backToTheFuture" "dates") -parseBttfDates :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a-parseBttfDates settings = parseBttfField settings "dates"+$(genProvider "backToTheFuture" "dates") -bttfDatesProvider ::-     (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)-bttfDatesProvider settings = fetchData settings BTTF parseBttfDates+$(genParser "backToTheFuture" "characters") -parseBttfQuote :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a-parseBttfQuote settings = parseBttfField settings "quotes"+$(genProvider "backToTheFuture" "characters") -bttfQuoteProvider ::-     (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)-bttfQuoteProvider settings = fetchData settings BTTF parseBttfQuote+$(genParser "backToTheFuture" "quotes")++$(genProvider "backToTheFuture" "quotes")
src/Faker/Provider/Bank.hs view
@@ -39,6 +39,6 @@      (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text) bankNameProvider settings = fetchData settings Bank parseBankName -swiftBicProvider ::+bankSwiftBicProvider ::      (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)-swiftBicProvider settings = fetchData settings Bank parseBankName+bankSwiftBicProvider settings = fetchData settings Bank parseBankName
src/Faker/Provider/Book.hs view
@@ -13,7 +13,7 @@ import Data.Yaml import Faker import Faker.Internal-import Faker.Provider.Name (nameProvider, resolveNameField, resolveNameText)+import Faker.Provider.Name (nameNameProvider, resolveNameField, resolveNameText) import Faker.Provider.TH import Language.Haskell.TH @@ -64,10 +64,18 @@ resolveBookText :: (MonadIO m, MonadThrow m) => FakerSettings -> Text -> m Text resolveBookText settings txt = do   let fields = resolveFields txt-  bookFields <- mapM (resolveBookField settings) fields+  bookFields <-+    mapM+      (\(seed, field) -> resolveBookField (modifyRandomGen settings seed) field)+      (zip [1 ..] fields)   pure $ operateFields txt bookFields  resolveBookField :: (MonadThrow m, MonadIO m) => FakerSettings -> Text -> m Text resolveBookField settings "Name.name" =-  randomUnresolvedVec settings nameProvider resolveNameText+  cachedRandomUnresolvedVec+    "name"+    "name"+    nameNameProvider+    resolveNameText+    settings resolveBookField settings str = throwM $ InvalidField "book" str
src/Faker/Provider/BossaNova.hs view
@@ -13,7 +13,6 @@ import Data.Yaml import Faker import Faker.Internal-import Faker.Provider.Name (nameProvider, resolveNameText) import Faker.Provider.TH import Language.Haskell.TH 
src/Faker/Provider/Cannabis.hs view
@@ -66,3 +66,7 @@ $(genParser "cannabis" "buzzwords")  $(genProvider "cannabis" "buzzwords")++$(genParser "cannabis" "brands")++$(genProvider "cannabis" "brands")
src/Faker/Provider/Coffee.hs view
@@ -85,9 +85,12 @@  $(genProvider "coffee" "descriptor") -$(genParser "coffee" "notes")+parseCoffeeNotes :: FakerSettings -> Value -> Parser (Unresolved Text)+parseCoffeeNotes settings = parseUnresolvedCoffeeField settings "notes" -$(genProvider "coffee" "notes")+coffeeNotesProvider ::+     (MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved Text)+coffeeNotesProvider settings = fetchData settings Coffee parseCoffeeNotes  $(genParser "coffee" "name_1") @@ -97,9 +100,13 @@  $(genProvider "coffee" "name_2") -$(genParserUnresolved "coffee" "blend_name")+parseCoffeeBlendName :: FakerSettings -> Value -> Parser (Unresolved Text)+parseCoffeeBlendName settings = parseUnresolvedCoffeeField settings "blend_name" -$(genProviderUnresolved "coffee" "blend_name")+coffeeBlendNameProvider ::+     (MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved Text)+coffeeBlendNameProvider settings =+  fetchData settings Coffee parseCoffeeBlendName  $(genParsers "coffee" ["regions", "colombia"]) @@ -173,11 +180,23 @@      (MonadIO m, MonadThrow m) => FakerSettings -> Text -> m Text resolveCoffeeText settings txt = do   let fields = resolveFields txt-  coffeeFields <- mapM (resolveCoffeeField settings) fields+  coffeeFields <-+    mapM+      (\(seed, field) ->+         resolveCoffeeField (modifyRandomGen settings seed) field)+      (zip [1 ..] fields)   pure $ operateFields txt coffeeFields  resolveCoffeeField ::      (MonadThrow m, MonadIO m) => FakerSettings -> Text -> m Text-resolveCoffeeField settings "name_1" = randomVec settings coffeeName1Provider-resolveCoffeeField settings "name_2" = randomVec settings coffeeName2Provider+resolveCoffeeField settings field@"name_1" =+  cachedRandomVec "coffee" field coffeeName1Provider settings+resolveCoffeeField settings field@"name_2" =+  cachedRandomVec "coffee" field coffeeName2Provider settings+resolveCoffeeField settings field@"intensifier" =+  cachedRandomVec "coffee" field coffeeIntensifierProvider settings+resolveCoffeeField settings field@"body" =+  cachedRandomVec "coffee" field coffeeBodyProvider settings+resolveCoffeeField settings field@"descriptor" =+  cachedRandomVec "coffee" field coffeeDescriptorProvider settings resolveCoffeeField settings str = throwM $ InvalidField "coffee" str
src/Faker/Provider/Company.hs view
@@ -13,7 +13,7 @@ import Data.Yaml import Faker import Faker.Internal-import Faker.Provider.Name (lastNameProvider, resolveNameText)+import Faker.Provider.Name (nameLastNameProvider, resolveNameText) import Faker.Provider.TH import Language.Haskell.TH @@ -84,12 +84,17 @@      (MonadIO m, MonadThrow m) => FakerSettings -> Text -> m Text resolveCompanyText settings txt = do   let fields = resolveFields txt-  companyFields <- mapM (resolveCompanyField settings) fields+  companyFields <-+    mapM+      (\(seed, field) ->+         resolveCompanyField (modifyRandomGen settings seed) field)+      (zip [1 ..] fields)   pure $ operateFields txt companyFields  resolveCompanyField ::      (MonadThrow m, MonadIO m) => FakerSettings -> Text -> m Text resolveCompanyField settings "Name.last_name" =-  randomVec settings lastNameProvider-resolveCompanyField settings "suffix" = randomVec settings companySuffixProvider+  cachedRandomVec "name" "last_name" nameLastNameProvider settings+resolveCompanyField settings field@"suffix" =+  cachedRandomVec "company" field companySuffixProvider settings resolveCompanyField settings str = throwM $ InvalidField "company" str
src/Faker/Provider/Compass.hs view
@@ -119,7 +119,11 @@      (MonadIO m, MonadThrow m) => FakerSettings -> Text -> m Text resolveCompassText settings txt = do   let fields = resolveFields txt-  compassFields <- mapM (resolveCompassField settings) fields+  compassFields <-+    mapM+      (\(seed, field) ->+         resolveCompassField (modifyRandomGen settings seed) field)+      (zip [1 ..] fields)   pure $ operateFields txt compassFields  cardinalProvider ::@@ -164,31 +168,53 @@  resolveCompassField ::      (MonadThrow m, MonadIO m) => FakerSettings -> Text -> m Text-resolveCompassField settings "cardinal" = randomVec settings cardinalProvider-resolveCompassField settings "ordinal" = randomVec settings ordinalProvider-resolveCompassField settings "half_wind" = randomVec settings halfWindProvider-resolveCompassField settings "quarter_wind" =-  randomVec settings quarterWindProvider-resolveCompassField settings "cardinal_abbreviation" =-  randomVec settings compassCardinalAbbreviationProvider-resolveCompassField settings "ordinal_abbreviation" =-  randomVec settings compassOrdinalAbbreviationProvider-resolveCompassField settings "half_wind_abbreviation" =-  randomVec settings compassHalfWindAbbreviationProvider-resolveCompassField settings "quarter_wind_abbreviation" =-  randomVec settings compassQuarterWindAbbreviationProvider-resolveCompassField settings "cardinal_azimuth" =-  randomVec settings compassCardinalAzimuthProvider-resolveCompassField settings "ordinal_azimuth" =-  randomVec settings compassOrdinalAzimuthProvider-resolveCompassField settings "half_wind_azimuth" =-  randomVec settings compassHalfWindAzimuthProvider-resolveCompassField settings "quarter_wind_azimuth" =-  randomVec settings compassQuarterWindAzimuthProvider-resolveCompassField settings "direction" =-  randomUnresolvedVec settings compassDirectionProvider resolveCompassText-resolveCompassField settings "abbreviation" =-  randomUnresolvedVec settings compassAbbreviationProvider resolveCompassText-resolveCompassField settings "azimuth" =-  randomUnresolvedVec settings compassAzimuthProvider resolveCompassText+resolveCompassField settings field@"cardinal" =+  cachedRandomVec "compass" field cardinalProvider settings+resolveCompassField settings field@"ordinal" =+  cachedRandomVec "compass" field ordinalProvider settings+resolveCompassField settings field@"half_wind" =+  cachedRandomVec "compass" field halfWindProvider settings+resolveCompassField settings field@"quarter_wind" =+  cachedRandomVec "compass" field quarterWindProvider settings+resolveCompassField settings field@"cardinal_abbreviation" =+  cachedRandomVec "compass" field compassCardinalAbbreviationProvider settings+resolveCompassField settings field@"ordinal_abbreviation" =+  cachedRandomVec "compass" field compassOrdinalAbbreviationProvider settings+resolveCompassField settings field@"half_wind_abbreviation" =+  cachedRandomVec "compass" field compassHalfWindAbbreviationProvider settings+resolveCompassField settings field@"quarter_wind_abbreviation" =+  cachedRandomVec+    "compass"+    field+    compassQuarterWindAbbreviationProvider+    settings+resolveCompassField settings field@"cardinal_azimuth" =+  cachedRandomVec "compass" field compassCardinalAzimuthProvider settings+resolveCompassField settings field@"ordinal_azimuth" =+  cachedRandomVec "compass" field compassOrdinalAzimuthProvider settings+resolveCompassField settings field@"half_wind_azimuth" =+  cachedRandomVec "compass" field compassHalfWindAzimuthProvider settings+resolveCompassField settings field@"quarter_wind_azimuth" =+  cachedRandomVec "compass" field compassQuarterWindAzimuthProvider settings+resolveCompassField settings field@"direction" =+  cachedRandomUnresolvedVec+    "compass"+    field+    compassDirectionProvider+    resolveCompassText+    settings+resolveCompassField settings field@"abbreviation" =+  cachedRandomUnresolvedVec+    "compass"+    field+    compassAbbreviationProvider+    resolveCompassText+    settings+resolveCompassField settings field@"azimuth" =+  cachedRandomUnresolvedVec+    "compass"+    field+    compassAzimuthProvider+    resolveCompassText+    settings resolveCompassField settings str = throwM $ InvalidField "compass" str
src/Faker/Provider/CultureSeries.hs view
@@ -19,7 +19,7 @@ parseCultureSeries settings (Object obj) = do   en <- obj .: (getLocale settings)   faker <- en .: "faker"-  cultureSeries <- faker .: "cultureSeries"+  cultureSeries <- faker .: "culture_series"   pure cultureSeries parseCultureSeries settings val =   fail $ "expected Object, but got " <> (show val)
src/Faker/Provider/DcComics.hs view
@@ -19,7 +19,7 @@ parseDcComics settings (Object obj) = do   en <- obj .: (getLocale settings)   faker <- en .: "faker"-  dcComics <- faker .: "dcComics"+  dcComics <- faker .: "dc_comics"   pure dcComics parseDcComics settings val = fail $ "expected Object, but got " <> (show val) 
src/Faker/Provider/Dota.hs view
@@ -104,9 +104,9 @@  $(genProviders "dota" ["dragon_knight", "quote"]) -$(genParsers "dota" ["earth_knight", "quote"])+$(genParsers "dota" ["earth_spirit", "quote"]) -$(genProviders "dota" ["earth_knight", "quote"])+$(genProviders "dota" ["earth_spirit", "quote"])  $(genParsers "dota" ["earthshaker", "quote"]) 
src/Faker/Provider/Educator.hs view
@@ -108,14 +108,20 @@      (MonadIO m, MonadThrow m) => FakerSettings -> Text -> m Text resolveEducatorText settings txt = do   let fields = resolveFields txt-  educatorFields <- mapM (resolveEducatorField settings) fields+  educatorFields <-+    mapM+      (\(seed, field) ->+         resolveEducatorField (modifyRandomGen settings seed) field)+      (zip [1 ..] fields)   pure $ operateFields txt educatorFields  resolveEducatorField ::      (MonadThrow m, MonadIO m) => FakerSettings -> Text -> m Text-resolveEducatorField settings "course_number" =-  randomUnresolvedVec-    settings+resolveEducatorField settings field@"course_number" =+  cachedRandomUnresolvedVec+    "educator"+    field     educatorTertiaryCourseNumberProvider     resolveEducatorText+    settings resolveEducatorField settings str = throwM $ InvalidField "educator" str
src/Faker/Provider/Finance.hs view
@@ -107,39 +107,34 @@      (MonadIO m, MonadThrow m) => FakerSettings -> Text -> m Text resolveFinanceText settings txt = do   let fields = resolveFields txt-  financeFields <- mapM (resolveFinanceField settings) fields+  financeFields <-+    mapM+      (\(seed, field) ->+         resolveFinanceField (modifyRandomGen settings seed) field)+      (zip [1 ..] fields)   pure $ operateFields txt financeFields  resolveFinanceField ::      (MonadThrow m, MonadIO m) => FakerSettings -> Text -> m Text-resolveFinanceField settings "visa" =-  randomUnresolvedVec settings financeVisaProvider resolveFinanceField-resolveFinanceField settings "mastercard" =-  randomUnresolvedVec settings financeMastercardProvider resolveFinanceField-resolveFinanceField settings "discover" =-  randomUnresolvedVec settings financeDiscoverProvider resolveFinanceField--- resolveFinanceField settings undefined =---   randomUnresolvedVec---     settings---     american_expressProvider---     resolveAmerican_expressText--- resolveFinanceField settings undefined =---   randomUnresolvedVec settings diners_clubProvider resolveDiners_clubText--- resolveFinanceField settings undefined =---   randomUnresolvedVec settings jcbProvider resolveJcbText--- resolveFinanceField settings undefined =---   randomUnresolvedVec settings switchProvider resolveSwitchText--- resolveFinanceField settings undefined =---   randomUnresolvedVec settings soloProvider resolveSoloText--- resolveFinanceField settings undefined =---   randomUnresolvedVec settings dankortProvider resolveDankortText--- resolveFinanceField settings undefined =---   randomUnresolvedVec settings maestroProvider resolveMaestroText--- resolveFinanceField settings undefined =---   randomUnresolvedVec---     settings---     forbrugsforeningenProvider---     resolveForbrugsforeningenText--- resolveFinanceField settings undefined =---   randomUnresolvedVec settings laserProvider resolveLaserText+resolveFinanceField settings field@"visa" =+  cachedRandomUnresolvedVec+    "finance"+    field+    financeVisaProvider+    resolveFinanceField+    settings+resolveFinanceField settings field@"mastercard" =+  cachedRandomUnresolvedVec+    "finance"+    field+    financeMastercardProvider+    resolveFinanceField+    settings+resolveFinanceField settings field@"discover" =+  cachedRandomUnresolvedVec+    "finance"+    field+    financeDiscoverProvider+    resolveFinanceField+    settings resolveFinanceField settings str = throwM $ InvalidField "finance" str
src/Faker/Provider/GratefulDead.hs view
@@ -20,7 +20,7 @@ parseGratefulDead settings (Object obj) = do   en <- obj .: (getLocale settings)   faker <- en .: "faker"-  gratefulDead <- faker .: "grateteful_dead"+  gratefulDead <- faker .: "grateful_dead"   pure gratefulDead parseGratefulDead settings val =   fail $ "expected Object, but got " <> (show val)
src/Faker/Provider/Job.hs view
@@ -89,13 +89,19 @@ resolveJobText :: (MonadIO m, MonadThrow m) => FakerSettings -> Text -> m Text resolveJobText settings txt = do   let fields = resolveFields txt-  jobFields <- mapM (resolveJobField settings) fields+  jobFields <-+    mapM+      (\(seed, field) -> resolveJobField (modifyRandomGen settings seed) field)+      (zip [1 ..] fields)   pure $ operateFields txt jobFields  resolveJobField :: (MonadThrow m, MonadIO m) => FakerSettings -> Text -> m Text-resolveJobField settings "seniority" = randomVec settings jobSeniorityProvider--- resolveJobField settings "field" = randomVec settings jobFieldProvider-resolveJobField settings "position" = randomVec settings jobPositionProvider-resolveJobField settings "title" =-  randomUnresolvedVec settings jobTitleProvider resolveJobText+resolveJobField settings field@"seniority" =+  cachedRandomVec "job" field jobSeniorityProvider settings+resolveJobField settings field@"field" =+  cachedRandomVec "job" field jobField2Provider settings+resolveJobField settings field@"position" =+  cachedRandomVec "job" field jobPositionProvider settings+resolveJobField settings field@"title" =+  cachedRandomUnresolvedVec "job" field jobTitleProvider resolveJobText settings resolveJobField settings str = throwM $ InvalidField "job" str
src/Faker/Provider/Name.hs view
@@ -1,17 +1,19 @@ {-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TemplateHaskell #-}  module Faker.Provider.Name where  import Config import Control.Monad.Catch import Control.Monad.IO.Class-import Data.Map.Strict (Map) import Data.Monoid ((<>)) import Data.Text (Text) import Data.Vector (Vector) import Data.Yaml import Faker import Faker.Internal+import Faker.Provider.TH+import Language.Haskell.TH  parseName :: FromJSON a => FakerSettings -> Value -> Parser a parseName settings (Object obj) = do@@ -28,6 +30,19 @@   field <- name .:? txt .!= mempty   pure field +parseNameFields ::+     (FromJSON a, Monoid a) => FakerSettings -> [Text] -> Value -> Parser a+parseNameFields settings txts val = do+  name <- parseName settings val+  helper name txts+  where+    helper :: (FromJSON a) => Value -> [Text] -> Parser a+    helper a [] = parseJSON a+    helper (Object a) (x:xs) = do+      field <- a .: x+      helper field xs+    helper a (x:xs) = fail $ "expect Object, but got " <> (show a)+ parseUnresolvedNameField ::      (FromJSON a, Monoid a)   => FakerSettings@@ -39,80 +54,63 @@   field <- name .:? txt .!= mempty   pure $ pure field -parseMaleFirstName ::-     (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a-parseMaleFirstName settings = parseNameField settings "male_first_name"+$(genParser "name" "male_first_name") -parseFemaleFirstName ::-     (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a-parseFemaleFirstName settings = parseNameField settings "female_first_name"+$(genProvider "name" "male_first_name") -parseFirstName ::-     (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser (Unresolved a)-parseFirstName settings = parseUnresolvedNameField settings "first_name"+$(genParser "name" "female_first_name") -parseLastName :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a-parseLastName settings = parseNameField settings "last_name"+$(genProvider "name" "female_first_name") -parsePrefix :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a-parsePrefix settings = parseNameField settings "prefix"+$(genParser "name" "prefix") -parseSuffix :: (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser a-parseSuffix settings = parseNameField settings "suffix"+$(genProvider "name" "prefix") -parseFieldName ::-     (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser (Unresolved a)-parseFieldName settings = parseUnresolvedNameField settings "name"+$(genParser "name" "suffix") -parseNameWithMiddle ::-     (FromJSON a, Monoid a) => FakerSettings -> Value -> Parser (Unresolved a)-parseNameWithMiddle settings =-  parseUnresolvedNameField settings "name_with_middle"+$(genProvider "name" "suffix") -maleFirstNameProvider ::-     (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)-maleFirstNameProvider settings = fetchData settings Name parseMaleFirstName+$(genParser "name" "last_name") -femaleFirstNameProvider ::-     (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)-femaleFirstNameProvider settings = fetchData settings Name parseFemaleFirstName+$(genProvider "name" "last_name") -firstNameProvider ::-     (MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved (Vector Text))-firstNameProvider settings = fetchData settings Name parseFirstName+$(genParserUnresolved "name" "name") -lastNameProvider ::-     (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)-lastNameProvider settings = fetchData settings Name parseLastName+$(genProviderUnresolved "name" "name") -prefixProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)-prefixProvider settings = fetchData settings Name parsePrefix+$(genParserUnresolved "name" "name_with_middle") -suffixProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text)-suffixProvider settings = fetchData settings Name parseSuffix+$(genProviderUnresolved "name" "name_with_middle") -nameProvider ::-     (MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved (Vector Text))-nameProvider settings = fetchData settings Name parseFieldName+$(genParserUnresolved "name" "first_name") -nameWithMiddleProvider ::-     (MonadThrow m, MonadIO m) => FakerSettings -> m (Unresolved (Vector Text))-nameWithMiddleProvider settings = fetchData settings Name parseNameWithMiddle+$(genProviderUnresolved "name" "first_name") -resolveNameText :: (MonadIO m, MonadThrow m) => FakerSettings -> Text -> m Text+resolveNameText :: (MonadThrow m, MonadIO m) => FakerSettings -> Text -> m Text resolveNameText settings txt = do   let fields = resolveFields txt-  nameFields <- mapM (resolveNameField settings) fields+  nameFields <-+    mapM+      (\(seed, field) -> resolveNameField (modifyRandomGen settings seed) field)+      (zip [1 ..] fields)   pure $ operateFields txt nameFields  resolveNameField :: (MonadThrow m, MonadIO m) => FakerSettings -> Text -> m Text-resolveNameField settings "female_first_name" =-  randomVec settings femaleFirstNameProvider-resolveNameField settings "male_first_name" =-  randomVec settings maleFirstNameProvider-resolveNameField settings "prefix" = randomVec settings prefixProvider-resolveNameField settings "suffix" = randomVec settings suffixProvider-resolveNameField settings "first_name" =-  randomUnresolvedVec settings firstNameProvider resolveNameText-resolveNameField settings "last_name" = randomVec settings lastNameProvider+resolveNameField settings field@"female_first_name" =+  cachedRandomVec "name" field nameFemaleFirstNameProvider settings+resolveNameField settings field@"male_first_name" =+  cachedRandomVec "name" field nameMaleFirstNameProvider settings+resolveNameField settings field@"prefix" =+  cachedRandomVec "name" field namePrefixProvider settings+resolveNameField settings field@"suffix" =+  cachedRandomVec "name" field nameSuffixProvider settings+resolveNameField settings field@"first_name" =+  cachedRandomUnresolvedVec+    "name"+    field+    nameFirstNameProvider+    resolveNameText+    settings+resolveNameField settings field@"last_name" =+  cachedRandomVec "name" field nameLastNameProvider settings resolveNameField settings str = throwM $ InvalidField "name" str
+ src/Faker/Provider/ProgrammingLanguage.hs view
@@ -0,0 +1,54 @@+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TemplateHaskell #-}++module Faker.Provider.ProgrammingLanguage where++import Config+import Control.Monad.Catch+import Control.Monad.IO.Class+import Data.Map.Strict (Map)+import Data.Monoid ((<>))+import Data.Text (Text)+import Data.Vector (Vector)+import Data.Yaml+import Faker+import Faker.Internal+import Faker.Provider.TH+import Language.Haskell.TH++parseProgrammingLauguage :: FromJSON a => FakerSettings -> Value -> Parser a+parseProgrammingLauguage settings (Object obj) = do+  en <- obj .: (getLocale settings)+  faker <- en .: "faker"+  programmingLauguage <- faker .: "programming_language"+  pure programmingLauguage+parseProgrammingLauguage settings val =+  fail $ "expected Object, but got " <> (show val)++parseProgrammingLauguageField ::+     (FromJSON a, Monoid a) => FakerSettings -> Text -> Value -> Parser a+parseProgrammingLauguageField settings txt val = do+  programmingLauguage <- parseProgrammingLauguage settings val+  field <- programmingLauguage .:? txt .!= mempty+  pure field++parseProgrammingLauguageFields ::+     (FromJSON a, Monoid a) => FakerSettings -> [Text] -> Value -> Parser a+parseProgrammingLauguageFields settings txts val = do+  programmingLauguage <- parseProgrammingLauguage settings val+  helper programmingLauguage txts+  where+    helper :: (FromJSON a) => Value -> [Text] -> Parser a+    helper a [] = parseJSON a+    helper (Object a) (x:xs) = do+      field <- a .: x+      helper field xs+    helper a (x:xs) = fail $ "expect Object, but got " <> (show a)++$(genParser "programmingLauguage" "name")++$(genProvider "programmingLauguage" "name")++$(genParser "programmingLauguage" "creator")++$(genProvider "programmingLauguage" "creator")
− src/Faker/Provider/ProgrammingLauguage.hs
@@ -1,54 +0,0 @@-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE TemplateHaskell #-}--module Faker.Provider.ProgrammingLauguage where--import Config-import Control.Monad.Catch-import Control.Monad.IO.Class-import Data.Map.Strict (Map)-import Data.Monoid ((<>))-import Data.Text (Text)-import Data.Vector (Vector)-import Data.Yaml-import Faker-import Faker.Internal-import Faker.Provider.TH-import Language.Haskell.TH--parseProgrammingLauguage :: FromJSON a => FakerSettings -> Value -> Parser a-parseProgrammingLauguage settings (Object obj) = do-  en <- obj .: (getLocale settings)-  faker <- en .: "faker"-  programmingLauguage <- faker .: "programming_language"-  pure programmingLauguage-parseProgrammingLauguage settings val =-  fail $ "expected Object, but got " <> (show val)--parseProgrammingLauguageField ::-     (FromJSON a, Monoid a) => FakerSettings -> Text -> Value -> Parser a-parseProgrammingLauguageField settings txt val = do-  programmingLauguage <- parseProgrammingLauguage settings val-  field <- programmingLauguage .:? txt .!= mempty-  pure field--parseProgrammingLauguageFields ::-     (FromJSON a, Monoid a) => FakerSettings -> [Text] -> Value -> Parser a-parseProgrammingLauguageFields settings txts val = do-  programmingLauguage <- parseProgrammingLauguage settings val-  helper programmingLauguage txts-  where-    helper :: (FromJSON a) => Value -> [Text] -> Parser a-    helper a [] = parseJSON a-    helper (Object a) (x:xs) = do-      field <- a .: x-      helper field xs-    helper a (x:xs) = fail $ "expect Object, but got " <> (show a)--$(genParser "programmingLauguage" "name")--$(genProvider "programmingLauguage" "name")--$(genParser "programmingLauguage" "creator")--$(genProvider "programmingLauguage" "creator")
src/Faker/Provider/Restaurant.hs view
@@ -83,18 +83,29 @@      (MonadIO m, MonadThrow m) => FakerSettings -> Text -> m Text resolveRestaurantText settings txt = do   let fields = resolveFields txt-  restaurantFields <- mapM (resolveRestaurantField settings) fields+  restaurantFields <-+    mapM+      (\(seed, field) ->+         resolveRestaurantField (modifyRandomGen settings seed) field)+      (zip [1 ..] fields)   pure $ operateFields txt restaurantFields  resolveRestaurantField ::      (MonadThrow m, MonadIO m) => FakerSettings -> Text -> m Text-resolveRestaurantField settings "name_prefix" =-  randomUnresolvedVec-    settings+resolveRestaurantField settings field@"name_prefix" =+  cachedRandomUnresolvedVec+    "restaurant"+    field     restaurantNamePrefixProvider     resolveRestaurantText-resolveRestaurantField settings "name_suffix" =-  randomVec settings restaurantNameSuffixProvider-resolveRestaurantField settings "name" =-  randomUnresolvedVec settings restaurantNameProvider resolveRestaurantText+    settings+resolveRestaurantField settings field@"name_suffix" =+  cachedRandomVec "restaurant" field restaurantNameSuffixProvider settings+resolveRestaurantField settings field@"name" =+  cachedRandomUnresolvedVec+    "restaurant"+    field+    restaurantNameProvider+    resolveRestaurantText+    settings resolveRestaurantField settings str = throwM $ InvalidField "restaurant" str
src/Faker/Provider/SlackEmoji.hs view
@@ -95,25 +95,33 @@      (MonadIO m, MonadThrow m) => FakerSettings -> Text -> m Text resolveSlackEmojiText settings txt = do   let fields = resolveFields txt-  slackEmojiFields <- mapM (resolveSlackEmojiField settings) fields+  slackEmojiFields <-+    mapM+      (\(seed, field) ->+         resolveSlackEmojiField (modifyRandomGen settings seed) field)+      (zip [1 ..] fields)   pure $ operateFields txt slackEmojiFields  resolveSlackEmojiField ::      (MonadThrow m, MonadIO m) => FakerSettings -> Text -> m Text-resolveSlackEmojiField settings "people" =-  randomVec settings slackEmojiPeopleProvider-resolveSlackEmojiField settings "nature" =-  randomVec settings slackEmojiNatureProvider-resolveSlackEmojiField settings "food_and_drink" =-  randomVec settings slackEmojiFoodAndDrinkProvider-resolveSlackEmojiField settings "celebration" =-  randomVec settings slackEmojiCelebrationProvider-resolveSlackEmojiField settings "activity" =-  randomVec settings slackEmojiActivityProvider-resolveSlackEmojiField settings "travel_and_places" =-  randomVec settings slackEmojiTravelAndPlacesProvider-resolveSlackEmojiField settings "objects_and_symbols" =-  randomVec settings slackEmojiObjectsAndSymbolsProvider-resolveSlackEmojiField settings "custom" =-  randomVec settings slackEmojiCustomProvider+resolveSlackEmojiField settings field@"people" =+  cachedRandomVec "slackEmoji" field slackEmojiPeopleProvider settings+resolveSlackEmojiField settings field@"nature" =+  cachedRandomVec "slackEmoji" field slackEmojiNatureProvider settings+resolveSlackEmojiField settings field@"food_and_drink" =+  cachedRandomVec "slackEmoji" field slackEmojiFoodAndDrinkProvider settings+resolveSlackEmojiField settings field@"celebration" =+  cachedRandomVec "slackEmoji" field slackEmojiCelebrationProvider settings+resolveSlackEmojiField settings field@"activity" =+  cachedRandomVec "slackEmoji" field slackEmojiActivityProvider settings+resolveSlackEmojiField settings field@"travel_and_places" =+  cachedRandomVec "slackEmoji" field slackEmojiTravelAndPlacesProvider settings+resolveSlackEmojiField settings field@"objects_and_symbols" =+  cachedRandomVec+    "slackEmoji"+    field+    slackEmojiObjectsAndSymbolsProvider+    settings+resolveSlackEmojiField settings field@"custom" =+  cachedRandomVec "slackEmoji" field slackEmojiCustomProvider settings resolveSlackEmojiField settings str = throwM $ InvalidField "slackEmoji" str
src/Faker/Provider/Source.hs view
@@ -46,24 +46,24 @@  $(genParsers "source" ["hello_world", "ruby"]) -$(genProviders "source" ["hello_world", "ruby"])+$(genProvidersSingle "source" ["hello_world", "ruby"])  $(genParsers "source" ["hello_world", "javascript"]) -$(genProviders "source" ["hello_world", "javascript"])+$(genProvidersSingle "source" ["hello_world", "javascript"])  $(genParsers "source" ["print", "ruby"]) -$(genProviders "source" ["print", "ruby"])+$(genProvidersSingle "source" ["print", "ruby"])  $(genParsers "source" ["print", "javascript"]) -$(genProviders "source" ["print", "javascript"])+$(genProvidersSingle "source" ["print", "javascript"])  $(genParsers "source" ["print_1_to_10", "ruby"]) -$(genProviders "source" ["print_1_to_10", "ruby"])+$(genProvidersSingle "source" ["print_1_to_10", "ruby"])  $(genParsers "source" ["print_1_to_10", "javascript"]) -$(genProviders "source" ["print_1_to_10", "javascript"])+$(genProvidersSingle "source" ["print_1_to_10", "javascript"])
src/Faker/Provider/Space.hs view
@@ -96,6 +96,6 @@  $(genProvider "space" "meteorite") -$(genParser "space" "launch_vehicule")+$(genParser "space" "launch_vehicle") -$(genProvider "space" "launch_vehicule")+$(genProvider "space" "launch_vehicle")
src/Faker/Provider/StarWars.hs view
@@ -100,12 +100,22 @@  resolveStarWarsField ::      (MonadThrow m, MonadIO m) => FakerSettings -> Text -> m Text-resolveStarWarsField settings "call_number" =-  randomUnresolvedVec settings starWarsCallNumbersProvider resolveStarWarsText-resolveStarWarsField settings "call_sign" =-  randomUnresolvedVec settings starWarsCallSignProvider resolveStarWarsText-resolveStarWarsField settings "call_squadron" =-  randomVec settings starWarsCallSquadronsProvider+resolveStarWarsField settings field@"call_number" =+  cachedRandomUnresolvedVec+    "starWars"+    field+    starWarsCallNumbersProvider+    resolveStarWarsText+    settings+resolveStarWarsField settings field@"call_sign" =+  cachedRandomUnresolvedVec+    "starWars"+    field+    starWarsCallSignProvider+    resolveStarWarsText+    settings+resolveStarWarsField settings field@"call_squadron" =+  cachedRandomVec "starWars" field starWarsCallSquadronsProvider settings resolveStarWarsField settings str = throwM $ InvalidField "starWars" str  $(genParsers "starWars" ["quotes", "admiral_ackbar"])
src/Faker/Provider/StrangerThings.hs view
@@ -45,9 +45,9 @@       helper field xs     helper a (x:xs) = fail $ "expect Object, but got " <> (show a) -$(genParser "strangerThings" "characters")+$(genParser "strangerThings" "character") -$(genProvider "strangerThings" "characters")+$(genProvider "strangerThings" "character")  $(genParser "strangerThings" "quote") 
src/Faker/Provider/Superhero.hs view
@@ -79,15 +79,19 @@      (MonadIO m, MonadThrow m) => FakerSettings -> Text -> m Text resolveSuperheroText settings txt = do   let fields = resolveFields txt-  superheroFields <- mapM (resolveSuperheroField settings) fields+  superheroFields <-+    mapM+      (\(seed, field) ->+         resolveSuperheroField (modifyRandomGen settings seed) field)+      (zip [1 ..] fields)   pure $ operateFields txt superheroFields  resolveSuperheroField ::      (MonadThrow m, MonadIO m) => FakerSettings -> Text -> m Text-resolveSuperheroField settings "Superhero.prefix" =-  randomVec settings superheroPrefixProvider-resolveSuperheroField settings "Superhero.suffix" =-  randomVec settings superheroSuffixProvider-resolveSuperheroField settings "Superhero.descriptor" =-  randomVec settings superheroDescriptorProvider+resolveSuperheroField settings field@"Superhero.prefix" =+  cachedRandomVec "superhero" field superheroPrefixProvider settings+resolveSuperheroField settings field@"Superhero.suffix" =+  cachedRandomVec "superhero" field superheroSuffixProvider settings+resolveSuperheroField settings field@"Superhero.descriptor" =+  cachedRandomVec "superhero" field superheroDescriptorProvider settings resolveSuperheroField settings str = throwM $ InvalidField "superhero" str
src/Faker/Provider/TH.hs view
@@ -159,6 +159,49 @@         ]     ] +genProvidersSingle ::+     Text -- ^ Entity name. Example: animal, beer etc. This should be always lowercase.+  -> [Text] -- ^ Field name within the entity.+  -> Q [Dec]+genProvidersSingle entityName fieldName = do+  let fieldNames = map textTitle fieldName+      fieldNames' = refinedText $ T.concat fieldNames+      funName =+        mkName $ unpack $ (refinedText entityName) <> fieldNames' <> "Provider"+      tvM = mkName "m"+      parserFnName =+        unpack $ "parse" <> (refinedText $ textTitle entityName) <> fieldNames'+  parserName <- lookupValueName parserFnName+  parserFn <-+    case parserName of+      Nothing -> fail $ "Faker.TH: Didn't find function " <> parserFnName+      Just fn -> return fn+  tsettings <- newName "settings"+  return $+    [ SigD+        funName+        (ForallT+           []+           [ AppT (ConT ''MonadThrow) (VarT tvM)+           , AppT (ConT ''MonadIO) (VarT tvM)+           ]+           (AppT+              (AppT ArrowT (ConT ''FakerSettings))+              (AppT (VarT tvM) (AppT (ConT ''Vector) (ConT ''Text)))))+    , FunD+        funName+        [ Clause+            [VarP tsettings]+            (NormalB+               (AppE+                  (AppE+                     (AppE (VarE 'fetchDataSingle) (VarE tsettings))+                     (ConE (mapSource entityName)))+                  (VarE parserFn)))+            []+        ]+    ]+ -- λ> runQ [d|beerNameProvider :: (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Text); beerNameProvider settings = fetchData settings Beer parseBeerName|] -- [SigD beerNameProvider_1 (ForallT [] [AppT (ConT Control.Monad.Catch.MonadThrow) (VarT m_0),AppT (ConT Control.Monad.IO.Class.MonadIO) (VarT m_0)] (AppT (AppT ArrowT (ConT Faker.FakerSettings)) (AppT (VarT m_0) (AppT (ConT Data.Vector.Vector) (ConT Data.Text.Internal.Text))))),FunD beerNameProvider_1 [Clause [VarP settings_2] (NormalB (AppE (AppE (AppE (VarE Config.fetchData) (VarE settings_2)) (ConE Config.Beer)) (VarE Faker.Provider.Beer.parseBeerName))) []]] -- $(genProvider "beer" "name")
src/Faker/Provider/Team.hs view
@@ -75,12 +75,22 @@ resolveTeamText :: (MonadIO m, MonadThrow m) => FakerSettings -> Text -> m Text resolveTeamText settings txt = do   let fields = resolveFields txt-  teamFields <- mapM (resolveTeamField settings) fields+  teamFields <-+    mapM+      (\(seed, field) -> resolveTeamField (modifyRandomGen settings seed) field)+      (zip [1 ..] fields)   pure $ operateFields txt teamFields  resolveTeamField :: (MonadThrow m, MonadIO m) => FakerSettings -> Text -> m Text-resolveTeamField settings "creature" = randomVec settings teamCreatureProvider-resolveTeamField settings "Address.state" = randomVec settings stateProvider-resolveTeamField settings "name" =-  randomUnresolvedVec settings teamNameProvider resolveTeamText+resolveTeamField settings field@"creature" =+  cachedRandomVec "team" field teamCreatureProvider settings+resolveTeamField settings "Address.state" =+  cachedRandomVec "address" "state" stateProvider settings+resolveTeamField settings field@"name" =+  cachedRandomUnresolvedVec+    "team"+    field+    teamNameProvider+    resolveTeamText+    settings resolveTeamField settings str = throwM $ InvalidField "team" str
src/Faker/Provider/University.hs view
@@ -14,7 +14,7 @@ import Faker import Faker.Internal import Faker.Provider.Address (stateProvider)-import Faker.Provider.Name (lastNameProvider)+import Faker.Provider.Name (nameLastNameProvider) import Faker.Provider.TH import Language.Haskell.TH @@ -73,17 +73,21 @@      (MonadIO m, MonadThrow m) => FakerSettings -> Text -> m Text resolveUniversityText settings txt = do   let fields = resolveFields txt-  universityFields <- mapM (resolveUniversityField settings) fields+  universityFields <-+    mapM+      (\(seed, field) ->+         resolveUniversityField (modifyRandomGen settings seed) field)+      (zip [1 ..] fields)   pure $ operateFields txt universityFields  resolveUniversityField ::      (MonadThrow m, MonadIO m) => FakerSettings -> Text -> m Text resolveUniversityField settings "University.prefix" =-  randomVec settings universityPrefixProvider+  cachedRandomVec "university" "prefix" universityPrefixProvider settings resolveUniversityField settings "University.suffix" =-  randomVec settings universitySuffixProvider+  cachedRandomVec "university" "suffix" universitySuffixProvider settings resolveUniversityField settings "Name.last_name" =-  randomVec settings lastNameProvider+  cachedRandomVec "name" "last_name" nameLastNameProvider settings resolveUniversityField settings "Address.state" =-  randomVec settings stateProvider+  cachedRandomVec "address" "state" stateProvider settings resolveUniversityField settings str = throwM $ InvalidField "university" str
src/Faker/Provider/Vehicle.hs view
@@ -97,11 +97,16 @@  $(genParser "vehicle" "doors") -$(genProvider "vehicle" "doors")+vehicleDoorsProvider ::+     (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Int)+vehicleDoorsProvider settings = fetchData settings Vehicle parseVehicleDoors  $(genParser "vehicle" "engine_sizes") -$(genProvider "vehicle" "engine_sizes")+vehicleEngineSizesProvider ::+     (MonadThrow m, MonadIO m) => FakerSettings -> m (Vector Int)+vehicleEngineSizesProvider settings =+  fetchData settings Vehicle parseVehicleEngineSizes  $(genParserUnresolved "vehicle" "license_plate") 
src/Faker/Quote.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Quote where 
src/Faker/Quote/Shakespeare.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Quote.Shakespeare where 
src/Faker/Relationship.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Relationship where @@ -8,7 +9,6 @@ import Faker.Provider.Relationship import Faker.TH - $(generateFakeField "relationship" "in_law")  $(generateFakeField "relationship" "spouse")@@ -17,12 +17,6 @@  $(generateFakeField "relationship" "sibling") -----$(generateFakeFields "relationship" ["familial","direct"])--$(generateFakeFields "relationship" ["familial","extended"])-+$(generateFakeFields "relationship" ["familial", "direct"]) +$(generateFakeFields "relationship" ["familial", "extended"])
src/Faker/Restaurant.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Restaurant where 
src/Faker/Science.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Science where @@ -8,15 +9,8 @@ import Faker.Provider.Science import Faker.TH - $(generateFakeField "science" "element")  $(generateFakeField "science" "element_symbol")  $(generateFakeField "science" "scientist")------
src/Faker/SlackEmoji.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.SlackEmoji where @@ -8,7 +9,6 @@ import Faker.Provider.SlackEmoji import Faker.TH - $(generateFakeField "slackEmoji" "people")  $(generateFakeField "slackEmoji" "nature")@@ -25,10 +25,4 @@  $(generateFakeField "slackEmoji" "custom") -- $(generateFakeFieldUnresolved "slackEmoji" "emoji")----
src/Faker/Source.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Source where @@ -8,21 +9,14 @@ import Faker.Provider.Source import Faker.TH ------$(generateFakeFields "source" ["hello_world","ruby"])--$(generateFakeFields "source" ["hello_world","javascript"])--$(generateFakeFields "source" ["print","ruby"])+$(generateFakeFields "source" ["hello_world", "ruby"]) -$(generateFakeFields "source" ["print","javascript"])+$(generateFakeFields "source" ["hello_world", "javascript"]) -$(generateFakeFields "source" ["print_1_to_10","ruby"])+$(generateFakeFields "source" ["print", "ruby"]) -$(generateFakeFields "source" ["print_1_to_10","javascript"])+$(generateFakeFields "source" ["print", "javascript"]) +$(generateFakeFields "source" ["print_1_to_10", "ruby"]) +$(generateFakeFields "source" ["print_1_to_10", "javascript"])
src/Faker/Space.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Space where @@ -8,7 +9,6 @@ import Faker.Provider.Space import Faker.TH - $(generateFakeField "space" "planet")  $(generateFakeField "space" "moon")@@ -35,10 +35,4 @@  $(generateFakeField "space" "meteorite") -$(generateFakeField "space" "launch_vehicule")------+$(generateFakeField "space" "launch_vehicle")
src/Faker/Sport/Basketball.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  -- | @since 0.2.0 module Faker.Sport.Basketball where
src/Faker/Sport/Football.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  -- | @since 0.2.0 module Faker.Sport.Football where
src/Faker/Subscription.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Subscription where @@ -8,7 +9,6 @@ import Faker.Provider.Subscription import Faker.TH - $(generateFakeField "subscription" "plans")  $(generateFakeField "subscription" "statuses")@@ -18,9 +18,3 @@ $(generateFakeField "subscription" "subscription_terms")  $(generateFakeField "subscription" "payment_terms")------
src/Faker/Superhero.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Superhero where @@ -8,7 +9,6 @@ import Faker.Provider.Superhero import Faker.TH - $(generateFakeField "superhero" "power")  $(generateFakeField "superhero" "prefix")@@ -17,10 +17,4 @@  $(generateFakeField "superhero" "descriptor") -- $(generateFakeFieldUnresolved "superhero" "name")----
src/Faker/TH.hs view
@@ -2,7 +2,12 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-} -module Faker.TH where+module Faker.TH+  ( generateFakeField+  , generateFakeFields+  , generateFakeFieldUnresolved+  , generateFakeFieldUnresolveds+  ) where  import Config import Control.Monad.Catch@@ -48,7 +53,14 @@     [ SigD funName (AppT (ConT ''Fake) (ConT ''Text))     , ValD         (VarP funName)-        (NormalB (AppE (ConE 'Fake) (AppE (VarE 'resolver) (VarE providerFn))))+        (NormalB+           (AppE+              (ConE 'Fake)+              (AppE+                 (AppE+                    (AppE (VarE 'cachedRandomVec) (LitE (StringL entityName)))+                    (LitE (StringL fieldName)))+                 (VarE providerFn))))         []     ] @@ -57,24 +69,32 @@   let fieldName' = map stringTitle fieldName       fieldName'' = concat fieldName'       pfn = refinedString $ entityName <> fieldName'' <> "Provider"-      funName = mkName $ lowerTitle $ refinedString fieldName''+      funNameString = lowerTitle $ refinedString fieldName''+      funName = mkName funNameString   providerName <- lookupValueName pfn   providerFn <-     case providerName of       Nothing ->-        fail $ "generateFakefield: Function " <> pfn <> " not found in scope"+        fail $ "generateFakefields: Function " <> pfn <> " not found in scope"       Just fn -> return fn   return $     [ SigD funName (AppT (ConT ''Fake) (ConT ''Text))     , ValD         (VarP funName)-        (NormalB (AppE (ConE 'Fake) (AppE (VarE 'resolver) (VarE providerFn))))+        (NormalB+           (AppE+              (ConE 'Fake)+              (AppE+                 (AppE+                    (AppE (VarE 'cachedRandomVec) (LitE (StringL entityName)))+                    (LitE (StringL funNameString)))+                 (VarE providerFn))))         []     ] --- λ> runQ [d|city2 :: Fake Text;city2 = Fake (unresolvedResolver streetNameProvider resolveAddressText)|]--- [SigD city2_0 (AppT (ConT Faker.Fake) (ConT Data.Text.Internal.Text)),ValD (VarP city2_0) (NormalB (AppE (ConE Faker.Fake) (AppE (AppE (VarE Faker.Internal.unresolvedResolver) (VarE Faker.Provider.Address.streetNameProvider)) (VarE Faker.Provider.Address.resolveAddressText)))) []]--- $(genrateFakeField "address" "state")+-- λ> runQ runQ [d|community :: Fake Text; community = Fake (cachedRandomUnresolvedVec "address" "community" communityProvider resolveAddressField)|]+-- [SigD community_1 (AppT (ConT Faker.Fake) (ConT Data.Text.Internal.Text)),ValD (VarP community_1) (NormalB (AppE (ConE Faker.Fake) (AppE (AppE (AppE (AppE (VarE Faker.Internal.cachedRandomUnresolvedVec) (LitE (StringL "address"))) (LitE (StringL "community"))) (VarE Faker.Provider.Address.communityProvider)) (VarE Faker.Provider.Address.resolveAddressField)))) []]+-- $(genrateFakeFieldUnresolved "address" "comunity") -- The above splice will generate a function named state -- Assumes the presence of the function named "addressStateProvider" and "resolveAddressText" generateFakeFieldUnresolved :: String -> String -> Q [Dec]@@ -104,7 +124,13 @@            (AppE               (ConE 'Fake)               (AppE-                 (AppE (VarE 'unresolvedResolver) (VarE providerFn))+                 (AppE+                    (AppE+                       (AppE+                          (VarE 'cachedRandomUnresolvedVec)+                          (LitE (StringL entityName)))+                       (LitE (StringL fieldName)))+                    (VarE providerFn))                  (VarE resolverFn))))         []     ]@@ -112,7 +138,8 @@ generateFakeFieldUnresolveds :: String -> [String] -> Q [Dec] generateFakeFieldUnresolveds entityName fieldNames = do   let fieldName' = refinedString $ concat $ map stringTitle fieldNames-      funName = mkName $ lowerTitle fieldName'+      funNameString = lowerTitle fieldName'+      funName = mkName funNameString       pfn = refinedString $ entityName <> fieldName' <> "Provider"       rfn = "resolve" <> (refinedString $ stringTitle entityName) <> "Text"   providerName <- lookupValueName pfn@@ -139,7 +166,13 @@            (AppE               (ConE 'Fake)               (AppE-                 (AppE (VarE 'unresolvedResolver) (VarE providerFn))+                 (AppE+                    (AppE+                       (AppE+                          (VarE 'cachedRandomUnresolvedVec)+                          (LitE (StringL entityName)))+                       (LitE (StringL funNameString)))+                    (VarE providerFn))                  (VarE resolverFn))))         []     ]
src/Faker/Team.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Team where @@ -8,17 +9,10 @@ import Faker.Provider.Team import Faker.TH - $(generateFakeField "team" "creature")  $(generateFakeField "team" "sport")  $(generateFakeField "team" "mascot") -- $(generateFakeFieldUnresolved "team" "name")----
src/Faker/TvShow/AquaTeenHungerForce.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE OverloadedStrings #-}+ module Faker.TvShow.AquaTeenHungerForce where  import Data.Text@@ -6,4 +8,5 @@ import Faker.Provider.AquaTeenHungerForce  character :: Fake Text-character = Fake $ resolver athfCharacterProvider+character =+  Fake $ cachedRandomVec "aquaTeenHungerForce" "character" athfCharacterProvider
src/Faker/TvShow/BoJackHorseman.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE OverloadedStrings #-}+ module Faker.TvShow.BoJackHorseman where  import Data.Text@@ -6,10 +8,15 @@ import Faker.Provider.BoJackHorseman  character :: Fake Text-character = Fake $ resolver boJackHorsemanCharacterProvider+character =+  Fake $+  cachedRandomVec "boJackHorseman" "character" boJackHorsemanCharacterProvider  quote :: Fake Text-quote = Fake $ resolver boJackHorsemanQuoteProvider+quote =+  Fake $ cachedRandomVec "boJackHorseman" "quote" boJackHorsemanQuoteProvider  tongueTwister :: Fake Text-tongueTwister = Fake $ resolver boJackHorsemanTongueTwisterProvider+tongueTwister =+  Fake $+  cachedRandomVec "boJackHorseman" "quote" boJackHorsemanTongueTwisterProvider
src/Faker/TvShow/BreakingBad.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.TvShow.BreakingBad where 
src/Faker/TvShow/Buffy.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.TvShow.Buffy where 
src/Faker/TvShow/Community.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.TvShow.Community where 
src/Faker/TvShow/DrWho.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.TvShow.DrWho where 
src/Faker/TvShow/DumbAndDumber.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.TvShow.DumbAndDumber where 
src/Faker/TvShow/FamilyGuy.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.TvShow.FamilyGuy where 
src/Faker/TvShow/FreshPrinceOfBelAir.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.TvShow.FreshPrinceOfBelAir where 
src/Faker/TvShow/Friends.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.TvShow.Friends where 
src/Faker/TvShow/GameOfThrones.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.TvShow.GameOfThrones where 
src/Faker/TvShow/HeyArnold.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.TvShow.HeyArnold where 
src/Faker/TvShow/HowIMetYourMother.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.TvShow.HowIMetYourMother where 
src/Faker/TvShow/MichaelScott.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.TvShow.MichaelScott where 
src/Faker/TvShow/NewGirl.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.TvShow.NewGirl where 
src/Faker/TvShow/ParksAndRec.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.TvShow.ParksAndRec where 
src/Faker/TvShow/RickAndMorty.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.TvShow.RickAndMorty where 
src/Faker/TvShow/Rupaul.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.TvShow.Rupaul where 
src/Faker/TvShow/Seinfeld.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.TvShow.Seinfeld where 
src/Faker/TvShow/SiliconValley.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.TvShow.SiliconValley where 
src/Faker/TvShow/Simpsons.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.TvShow.Simpsons where 
src/Faker/TvShow/SouthPark.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.TvShow.SouthPark where 
src/Faker/TvShow/StarTrek.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.TvShow.StarTrek where 
src/Faker/TvShow/Stargate.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.TvShow.Stargate where 
src/Faker/TvShow/StrangerThings.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.TvShow.StrangerThings where @@ -8,6 +9,6 @@ import Faker.Provider.StrangerThings import Faker.TH -$(generateFakeField "strangerThings" "characters")+$(generateFakeField "strangerThings" "character")  $(generateFakeField "strangerThings" "quote")
src/Faker/TvShow/TheExpanse.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.TvShow.TheExpanse where 
src/Faker/TvShow/TheItCrowd.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.TvShow.TheItCrowd where 
src/Faker/TvShow/TheThickOfIt.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.TvShow.TheThickOfIt where 
src/Faker/TvShow/TwinPeaks.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.TvShow.TwinPeaks where 
src/Faker/TvShow/VentureBros.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.TvShow.VentureBros where 
src/Faker/University.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.University where 
src/Faker/Vehicle.hs view
@@ -1,4 +1,6 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Vehicle where @@ -28,9 +30,11 @@  $(generateFakeField "vehicle" "standard_specs") -$(generateFakeField "vehicle" "doors")+doors :: Fake Int+doors = Fake $ resolver vehicleDoorsProvider -$(generateFakeField "vehicle" "engine_sizes")+engineSizes :: Fake Int+engineSizes = Fake $ resolver vehicleEngineSizesProvider  $(generateFakeFieldUnresolved "vehicle" "license_plate") 
src/Faker/Verbs.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Verbs where @@ -8,7 +9,6 @@ import Faker.Provider.Verbs import Faker.TH - $(generateFakeField "verbs" "base")  $(generateFakeField "verbs" "past")@@ -18,9 +18,3 @@ $(generateFakeField "verbs" "simple_present")  $(generateFakeField "verbs" "ing_form")------
src/Faker/WorldCup.hs view
@@ -1,4 +1,6 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.WorldCup where @@ -8,351 +10,344 @@ import Faker.Provider.WorldCup import Faker.TH - $(generateFakeField "worldCup" "teams")  $(generateFakeField "worldCup" "stadiums")  $(generateFakeField "worldCup" "cities") -----$(generateFakeFields "worldCup" ["groups","group_A"])--$(generateFakeFields "worldCup" ["groups","group_B"])--$(generateFakeFields "worldCup" ["groups","group_C"])+$(generateFakeFields "worldCup" ["groups", "group_A"]) -$(generateFakeFields "worldCup" ["groups","group_D"])+$(generateFakeFields "worldCup" ["groups", "group_B"]) -$(generateFakeFields "worldCup" ["groups","group_E"])+$(generateFakeFields "worldCup" ["groups", "group_C"]) -$(generateFakeFields "worldCup" ["groups","group_F"])+$(generateFakeFields "worldCup" ["groups", "group_D"]) -$(generateFakeFields "worldCup" ["groups","group_G"])+$(generateFakeFields "worldCup" ["groups", "group_E"]) -$(generateFakeFields "worldCup" ["groups","group_H"])+$(generateFakeFields "worldCup" ["groups", "group_F"]) -$(generateFakeFields "worldCup" ["rosters","Egypt","coach"])+$(generateFakeFields "worldCup" ["groups", "group_G"]) -$(generateFakeFields "worldCup" ["rosters","Egypt","goalkeepers"])+$(generateFakeFields "worldCup" ["groups", "group_H"]) -$(generateFakeFields "worldCup" ["rosters","Egypt","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Egypt", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Egypt","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Egypt", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Egypt","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Egypt", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","Russia","coach"])+$(generateFakeFields "worldCup" ["rosters", "Egypt", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","Russia","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "Egypt", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","Russia","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Russia", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Russia","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Russia", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Russia","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Russia", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","Saudi_Arabia","coach"])+$(generateFakeFields "worldCup" ["rosters", "Russia", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","Saudi_Arabia","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "Russia", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","Saudi_Arabia","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Saudi_Arabia", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Saudi_Arabia","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Saudi_Arabia", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Saudi_Arabia","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Saudi_Arabia", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","Uruguay","coach"])+$(generateFakeFields "worldCup" ["rosters", "Saudi_Arabia", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","Uruguay","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "Saudi_Arabia", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","Uruguay","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Uruguay", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Uruguay","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Uruguay", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Uruguay","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Uruguay", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","Iran","coach"])+$(generateFakeFields "worldCup" ["rosters", "Uruguay", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","Iran","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "Uruguay", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","Iran","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Iran", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Iran","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Iran", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Iran","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Iran", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","Morocco","coach"])+$(generateFakeFields "worldCup" ["rosters", "Iran", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","Morocco","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "Iran", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","Morocco","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Morocco", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Morocco","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Morocco", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Morocco","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Morocco", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","Portugal","coach"])+$(generateFakeFields "worldCup" ["rosters", "Morocco", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","Portugal","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "Morocco", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","Portugal","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Portugal", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Portugal","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Portugal", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Portugal","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Portugal", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","Spain","coach"])+$(generateFakeFields "worldCup" ["rosters", "Portugal", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","Spain","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "Portugal", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","Spain","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Spain", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Spain","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Spain", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Spain","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Spain", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","Australia","coach"])+$(generateFakeFields "worldCup" ["rosters", "Spain", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","Australia","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "Spain", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","Australia","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Australia", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Australia","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Australia", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Australia","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Australia", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","Denmark","coach"])+$(generateFakeFields "worldCup" ["rosters", "Australia", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","Denmark","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "Australia", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","Denmark","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Denmark", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Denmark","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Denmark", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Denmark","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Denmark", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","France","coach"])+$(generateFakeFields "worldCup" ["rosters", "Denmark", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","France","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "Denmark", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","France","defenders"])+$(generateFakeFields "worldCup" ["rosters", "France", "coach"]) -$(generateFakeFields "worldCup" ["rosters","France","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "France", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","France","forwards"])+$(generateFakeFields "worldCup" ["rosters", "France", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","Peru","coach"])+$(generateFakeFields "worldCup" ["rosters", "France", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","Peru","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "France", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","Peru","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Peru", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Peru","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Peru", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Peru","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Peru", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","Argentina","coach"])+$(generateFakeFields "worldCup" ["rosters", "Peru", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","Argentina","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "Peru", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","Argentina","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Argentina", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Argentina","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Argentina", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Argentina","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Argentina", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","Croatia","coach"])+$(generateFakeFields "worldCup" ["rosters", "Argentina", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","Croatia","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "Argentina", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","Croatia","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Croatia", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Croatia","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Croatia", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Croatia","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Croatia", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","Iceland","coach"])+$(generateFakeFields "worldCup" ["rosters", "Croatia", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","Iceland","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "Croatia", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","Iceland","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Iceland", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Iceland","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Iceland", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Iceland","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Iceland", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","Nigeria","coach"])+$(generateFakeFields "worldCup" ["rosters", "Iceland", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","Nigeria","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "Iceland", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","Nigeria","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Nigeria", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Nigeria","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Nigeria", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Nigeria","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Nigeria", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","Brazil","coach"])+$(generateFakeFields "worldCup" ["rosters", "Nigeria", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","Brazil","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "Nigeria", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","Brazil","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Brazil", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Brazil","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Brazil", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Brazil","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Brazil", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","Costa_Rica","coach"])+$(generateFakeFields "worldCup" ["rosters", "Brazil", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","Costa_Rica","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "Brazil", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","Costa_Rica","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Costa_Rica", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Costa_Rica","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Costa_Rica", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Costa_Rica","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Costa_Rica", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","Serbia","coach"])+$(generateFakeFields "worldCup" ["rosters", "Costa_Rica", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","Serbia","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "Costa_Rica", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","Serbia","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Serbia", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Serbia","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Serbia", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Serbia","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Serbia", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","Switzerland","coach"])+$(generateFakeFields "worldCup" ["rosters", "Serbia", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","Switzerland","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "Serbia", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","Switzerland","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Switzerland", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Switzerland","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Switzerland", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Switzerland","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Switzerland", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","Germany","coach"])+$(generateFakeFields "worldCup" ["rosters", "Switzerland", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","Germany","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "Switzerland", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","Germany","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Germany", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Germany","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Germany", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Germany","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Germany", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","Mexico","coach"])+$(generateFakeFields "worldCup" ["rosters", "Germany", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","Mexico","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "Germany", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","Mexico","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Mexico", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Mexico","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Mexico", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Mexico","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Mexico", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","South Korea","coach"])+$(generateFakeFields "worldCup" ["rosters", "Mexico", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","South Korea","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "Mexico", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","South Korea","defenders"])+$(generateFakeFields "worldCup" ["rosters", "South Korea", "coach"]) -$(generateFakeFields "worldCup" ["rosters","South Korea","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "South Korea", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","South Korea","forwards"])+$(generateFakeFields "worldCup" ["rosters", "South Korea", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","Sweden","coach"])+$(generateFakeFields "worldCup" ["rosters", "South Korea", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","Sweden","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "South Korea", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","Sweden","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Sweden", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Sweden","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Sweden", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Sweden","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Sweden", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","Belgium","coach"])+$(generateFakeFields "worldCup" ["rosters", "Sweden", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","Belgium","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "Sweden", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","Belgium","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Belgium", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Belgium","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Belgium", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Belgium","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Belgium", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","England","coach"])+$(generateFakeFields "worldCup" ["rosters", "Belgium", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","England","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "Belgium", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","England","defenders"])+$(generateFakeFields "worldCup" ["rosters", "England", "coach"]) -$(generateFakeFields "worldCup" ["rosters","England","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "England", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","England","forwards"])+$(generateFakeFields "worldCup" ["rosters", "England", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","Panama","coach"])+$(generateFakeFields "worldCup" ["rosters", "England", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","Panama","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "England", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","Panama","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Panama", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Panama","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Panama", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Panama","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Panama", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","Tunisia","coach"])+$(generateFakeFields "worldCup" ["rosters", "Panama", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","Tunisia","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "Panama", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","Tunisia","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Tunisia", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Tunisia","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Tunisia", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Tunisia","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Tunisia", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","Columbia","coach"])+$(generateFakeFields "worldCup" ["rosters", "Tunisia", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","Columbia","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "Tunisia", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","Columbia","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Columbia", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Columbia","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Columbia", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Columbia","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Columbia", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","Japan","coach"])+$(generateFakeFields "worldCup" ["rosters", "Columbia", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","Japan","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "Columbia", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","Japan","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Japan", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Japan","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Japan", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Japan","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Japan", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","Poland","coach"])+$(generateFakeFields "worldCup" ["rosters", "Japan", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","Poland","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "Japan", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","Poland","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Poland", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Poland","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Poland", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Poland","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Poland", "defenders"]) -$(generateFakeFields "worldCup" ["rosters","Senegal","coach"])+$(generateFakeFields "worldCup" ["rosters", "Poland", "midfielders"]) -$(generateFakeFields "worldCup" ["rosters","Senegal","goalkeepers"])+$(generateFakeFields "worldCup" ["rosters", "Poland", "forwards"]) -$(generateFakeFields "worldCup" ["rosters","Senegal","defenders"])+$(generateFakeFields "worldCup" ["rosters", "Senegal", "coach"]) -$(generateFakeFields "worldCup" ["rosters","Senegal","midfielders"])+$(generateFakeFields "worldCup" ["rosters", "Senegal", "goalkeepers"]) -$(generateFakeFields "worldCup" ["rosters","Senegal","forwards"])+$(generateFakeFields "worldCup" ["rosters", "Senegal", "defenders"]) +$(generateFakeFields "worldCup" ["rosters", "Senegal", "midfielders"]) +$(generateFakeFields "worldCup" ["rosters", "Senegal", "forwards"])
src/Faker/Yoda.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}  module Faker.Yoda where @@ -8,11 +9,4 @@ import Faker.Provider.Yoda import Faker.TH - $(generateFakeField "yoda" "quotes")------
test/AddressSpec.hs view
@@ -8,11 +8,12 @@ import Data.Text hiding (all, map) import qualified Data.Text as T import qualified Data.Vector as V-import Faker+import Faker hiding (defaultFakerSettings) import Faker.Address import Faker.Internal import Faker.Provider.Address import Test.Hspec+import TestImport  fakerException :: Selector FakerException fakerException = const True@@ -21,7 +22,7 @@ spec = do   describe "Address" $ do     it "parses countries for defaultSettings" $ do-      ctries <- countriesProvider defaultFakerSettings+      ctries <- countryProvider defaultFakerSettings       ctries `shouldSatisfy` (\x -> V.length x >= 40)     it "parses countryByCode for defaultSettings" $ do       ctries <- countryByCodeProvider defaultFakerSettings@@ -30,7 +31,7 @@       locales <- populateLocales       let settings :: [FakerSettings] =             map (\l -> setLocale l defaultFakerSettings) locales-          ctries :: IO [V.Vector Text] = mapM countriesProvider settings+          ctries :: IO [V.Vector Text] = mapM countryProvider settings       ctries' :: [V.Vector Text] <- ctries       let exp :: [Bool] = map (\x -> V.length x >= 10) ctries'       True `shouldBe` (all (\x -> x == True) exp)@@ -151,6 +152,29 @@       it "basic check" $ do         fakeCountry <- generate country         fakeCountry `shouldBe` "Ecuador"+      it "check community equality" $ do+        let community1 :: Fake Text+            community1 =+              Fake+                (cachedRandomUnresolvedVec+                   "address"+                   "community"+                   communityProvider+                   resolveAddressText)+        c1 <- generate community1+        c2 <- generate community+        c1 `shouldBe` c2+      it "check city prefix equality" $ do+        let cityPrefix1 :: Fake Text+            cityPrefix1 =+              Fake+                (cachedRandomVec+                   "address"+                   "cityPrefix"+                   addressCityPrefixProvider)+        c1 <- generate cityPrefix1+        c2 <- generate cityPrefix+        c1 `shouldBe` c2       it "Monad instance of Fake" $ do         let someCountry :: Fake Text             someCountry = do@@ -198,7 +222,7 @@         c1 `shouldNotBe` c2     describe "Empty data sources" $ do       it "For ee locale, countries is empty" $ do-        ctries <- countriesProvider (setLocale "ee" defaultFakerSettings)+        ctries <- countryProvider (setLocale "ee" defaultFakerSettings)         ctries `shouldSatisfy` (\x -> V.length x == 0)       it "For ee locale, throws exception" $ do         let action =
test/AppSpec.hs view
@@ -8,12 +8,12 @@ import Data.Text hiding (all, map) import qualified Data.Text as T import qualified Data.Vector as V-import Faker-+import Faker hiding (defaultFakerSettings) import Faker.App import Faker.Internal import Faker.Provider.App import Test.Hspec+import TestImport  spec :: Spec spec = do
test/BeerSpec.hs view
@@ -11,10 +11,11 @@ import qualified Data.Text as T import Data.Vector (Vector) import qualified Data.Vector as V-import Faker+import Faker hiding (defaultFakerSettings) import Faker.Internal import Faker.Provider.Beer import Test.Hspec+import TestImport  spec :: Spec spec = do
test/CoffeeSpec.hs view
@@ -11,7 +11,7 @@ import qualified Data.Text as T import Data.Vector (Vector) import qualified Data.Vector as V-import Faker+import Faker hiding (defaultFakerSettings) import Faker.Book.Dune import Faker.Coffee import Faker.Commerce@@ -21,6 +21,7 @@ import Faker.Provider.Coffee import qualified Faker.TvShow.DumbAndDumber as DD import Test.Hspec+import TestImport  spec :: Spec spec = do
test/FakerSpec.hs view
@@ -31,7 +31,8 @@ import Faker.Internal import Faker.Job (field) import Faker.Movie.StarWars-import Faker.Nation (flagEmoji)++-- import Faker.Nation (flagEmoji) import Faker.PhoneNumber import Faker.Provider.Educator import qualified Faker.Restaurant as FR@@ -61,7 +62,7 @@   describe "Faker Compass Generate" $ do     it "Resolver check" $ do       ctries <- generate direction-      (ctries) `shouldBe` "SE"+      (ctries) `shouldBe` "southwest"     it "Resolver check" $ do       ctries <- generate $ listOf 5 direction       (ctries) `shouldSatisfy` (\x -> Prelude.length x == 5)@@ -108,9 +109,9 @@     it "University" $ do       item <- generate FU.name       item `shouldSatisfy` isText-    it "Nation - flagEmoji" $ do-      item <- generate flagEmoji-      item `shouldSatisfy` isText+    -- it "Nation - flagEmoji" $ do+    --   item <- generate flagEmoji+    --   item `shouldSatisfy` isText     it "Job" $ do       item <- generate field       item `shouldSatisfy` isText@@ -121,7 +122,7 @@     describe "Restaurant" $ do       it "name" $ do         item <- generate FR.name-        item `shouldBe` "Thirsty House"+        item `shouldBe` "Sweet House"       it "name_suffix" $ do         item <- generate FR.nameSuffix         item `shouldSatisfy` isText
test/InternalSpec.hs view
@@ -19,3 +19,6 @@       it "proper case conversion" $ do         let str = "hello_world"         (refinedString str) `shouldBe` "helloWorld"+      -- it "Starting case check" $ do+      --   let str = "HelloWorld"+      --   (refinedString str) `shouldBe` "helloWorld"
test/NameSpec.hs view
@@ -25,3 +25,18 @@     it "name" $ do       item <- generate name       item `shouldSatisfy` isText+    it "first_name" $ do+      item <- generate firstName+      item `shouldSatisfy` isText+    it "last_name" $ do+      item <- generate lastName+      item `shouldSatisfy` isText+    it "name_with_middle" $ do+      item <- generate nameWithMiddle+      item `shouldSatisfy` isText+    it "male_first_name" $ do+      item <- generate maleFirstName+      item `shouldSatisfy` isText+    it "female_first_name" $ do+      item <- generate femaleFirstName+      item `shouldSatisfy` isText
test/OperaSpec.hs view
@@ -33,5 +33,4 @@       item `shouldSatisfy` isText     it "italianByVincenzoBellini" $ do       item <- generate italianByVincenzoBellini-      print item       item `shouldSatisfy` isText
test/OtherSpec.hs view
@@ -12,9 +12,14 @@ import qualified Data.Text.IO as TIO import Data.Vector (Vector) import qualified Data.Vector as V-import Faker+import Faker hiding (defaultFakerSettings)+import qualified Faker.App as AP+import qualified Faker.Educator as ED import Faker.Name+import Faker.Source+import qualified Faker.WorldCup as WC import Test.Hspec+import TestImport  isText :: Text -> Bool isText x = T.length x >= 1@@ -22,21 +27,34 @@ spec :: Spec spec = do   describe "Faker Generate" $ do+    it "ruby code" $ do+      hworld <- generate helloWorldRuby+      hworld `shouldSatisfy` isText     it "name with middle - ee" $ do       ctries <-         generateWithSettings           (setLocale "ee" defaultFakerSettings)           nameWithMiddle-      (ctries) `shouldBe` "Kaido Leok Leok"+      (ctries) `shouldBe` "Kajar Vaino Kõiv"     it "name with middle - pak" $ do       ctries <-         generateWithSettings           (setLocale "en-PAK" defaultFakerSettings)           nameWithMiddle-      (ctries) `shouldBe` "Zia Ash Ash"+      (ctries) `shouldBe` "Mian Khan Nambardar"     it "name with middle - au" $ do       ctries <-         generateWithSettings           (setLocale "en-AU" defaultFakerSettings)           nameWithMiddle-      (ctries) `shouldBe` "Georgia Grady Grady"+      (ctries) `shouldBe` "Sarah Kirlin Jenkins"+    it "group A - WC" $ do+      ga <- generate WC.groupsGroupA+      ga `shouldBe` "Russia"+    it "courseNumber - Edu" $ do+      ga <- generate ED.tertiaryCourseNumber+      ga `shouldBe` "215"+    it "App author" $ do+      ga <-+        generateWithSettings (setDeterministic defaultFakerSettings) AP.author+      ga `shouldBe` "Steuber, Donnelly and Goldner"
+ test/TestImport.hs view
@@ -0,0 +1,16 @@+module TestImport where++import qualified Data.HashMap.Strict as HM+import Data.IORef+import qualified Faker as F+import System.IO.Unsafe++defaultFakerSettings :: F.FakerSettings+defaultFakerSettings =+  unsafePerformIO $ do+    cfile <- newIORef HM.empty+    cfield <- newIORef HM.empty+    let settings = F.defaultFakerSettings+    s1 <- F.replaceCacheField HM.empty settings+    s2 <- F.replaceCacheFile HM.empty s1+    return s2
+ test/TextSpec.hs view
@@ -0,0 +1,1460 @@+{-# LANGUAGE ScopedTypeVariables #-}++module TextSpec where++import Data.Text (Text)+import qualified Data.Text as T+import Faker hiding (defaultFakerSettings)+import qualified Faker.Address as FA+import qualified Faker.Ancient as AN+import qualified Faker.App as AP+import qualified Faker.Appliance as AP+import qualified Faker.Artist as AR+import qualified Faker.Bank as BA+import qualified Faker.Beer as BE+import qualified Faker.Book as BO+import qualified Faker.Book.CultureSeries as CE+import qualified Faker.Book.Dune as DU+import qualified Faker.Book.Lovecraft as LO+import qualified Faker.BossaNova as BO+import qualified Faker.Business as BU+import qualified Faker.Cannabis as CA+import qualified Faker.ChuckNorris as CH+import qualified Faker.Code as CO+import qualified Faker.Coffee as CO+import qualified Faker.Coin as CO+import qualified Faker.Color as CO+import qualified Faker.Commerce as CO+import qualified Faker.Company as CM+import qualified Faker.Compass as CO+import qualified Faker.Construction as CO+import qualified Faker.Cosmere as CO+import qualified Faker.Creature.Animal as AN+import qualified Faker.Creature.Cat as CA+import qualified Faker.Creature.Dog as DO+import qualified Faker.Creature.Horse as HO+import qualified Faker.CryptoCoin as CO+import qualified Faker.Currency as CU+import qualified Faker.DcComics as DC+import qualified Faker.Demographic as DE+import qualified Faker.Dessert as DE+import qualified Faker.Educator as ED+import qualified Faker.ElectricalComponents as EC+import qualified Faker.Esport as ES+import qualified Faker.File as FI+import qualified Faker.Finance as FI+import qualified Faker.Food as FO+import qualified Faker.FunnyName as FU+import qualified Faker.Game.Dota as DO+import qualified Faker.Game.ElderScrolls as EL+import qualified Faker.Game.Fallout as FA+import qualified Faker.Game.HalfLife as HA+import qualified Faker.Game.Heroes as HE+import qualified Faker.Game.HeroesOfTheStorm as HS+import qualified Faker.Game.Myst as MY+import qualified Faker.Game.Overwatch as OV+import qualified Faker.Game.Pokemon as PO+import qualified Faker.Game.SonicTheHedgehog as SO+import qualified Faker.Game.SuperSmashBros as SU+import qualified Faker.Game.Witcher as WI+import qualified Faker.Game.Witcher as WI+import qualified Faker.Game.WorldOfWarcraft as WO+import qualified Faker.Game.Zelda as ZE+import qualified Faker.Gender as GE+import qualified Faker.GreekPhilosophers as GR+import qualified Faker.Hacker as HA+import qualified Faker.Hipster as HI+import qualified Faker.House as HO+import qualified Faker.IndustrySegments as IN+import qualified Faker.Internet as IN+import qualified Faker.JapaneseMedia.DragonBall as DR+import qualified Faker.JapaneseMedia.OnePiece as ON+import qualified Faker.JapaneseMedia.SwordArtOnline as SW+import qualified Faker.Job as JO+import qualified Faker.Kpop as KP+import qualified Faker.LeagueOfLegends as LE+import qualified Faker.Lorem as LM+import qualified Faker.Markdown as MA+import qualified Faker.Marketing as MA+import qualified Faker.Measurement as ME+import qualified Faker.Military as MI+import qualified Faker.Movie as MO+import qualified Faker.Movie.BackToTheFuture as BA+import qualified Faker.Movie.Ghostbusters as GH+import qualified Faker.Movie.GratefulDead as GR+import qualified Faker.Movie.HarryPotter as HA+import qualified Faker.Movie.HitchhikersGuideToTheGalaxy as HI+import qualified Faker.Movie.Hobbit as HO+import qualified Faker.Movie.Lebowski as LE+import qualified Faker.Movie.LordOfTheRings as LO+import qualified Faker.Movie.PrincessBride as PR+import qualified Faker.Movie.StarWars as ST+import qualified Faker.Movie.VForVendetta as VF+import qualified Faker.Music as MU+import qualified Faker.Music.Opera as OP+import qualified Faker.Music.Phish as PH+import qualified Faker.Music.RockBand as RO+import qualified Faker.Music.UmphreysMcgee as UM+import qualified Faker.Name as NA+import qualified Faker.Nation as NA+import qualified Faker.NatoPhoneticAlphabet as NA+import qualified Faker.PhoneNumber as PH+import qualified Faker.ProgrammingLanguage as PR+import qualified Faker.Quote as QU+import qualified Faker.Quote.Shakespeare as SH+import qualified Faker.Relationship as RE+import qualified Faker.Restaurant as RE+import qualified Faker.Science as SC+import qualified Faker.SlackEmoji as SL+import qualified Faker.Source as SO+import qualified Faker.Space as SP+import qualified Faker.Sport.Basketball as BA+import qualified Faker.Sport.Football as FO+import qualified Faker.Subscription as SU+import qualified Faker.Superhero as SU+import qualified Faker.Team as TE+import qualified Faker.TvShow.AquaTeenHungerForce as AQ+import qualified Faker.TvShow.BoJackHorseman as BO+import qualified Faker.TvShow.BreakingBad as BR+import qualified Faker.TvShow.Buffy as BU+import qualified Faker.TvShow.Community as CO+import qualified Faker.TvShow.DrWho as DR+import qualified Faker.TvShow.DumbAndDumber as DD+import qualified Faker.TvShow.FamilyGuy as FA+import qualified Faker.TvShow.FreshPrinceOfBelAir as FR+import qualified Faker.TvShow.Friends as FI+import qualified Faker.TvShow.GameOfThrones as GA+import qualified Faker.TvShow.HeyArnold as HE+import qualified Faker.TvShow.HowIMetYourMother as HI+import qualified Faker.TvShow.MichaelScott as MI+import qualified Faker.TvShow.NewGirl as NE+import qualified Faker.TvShow.ParksAndRec as PA+import qualified Faker.TvShow.RickAndMorty as RI+import qualified Faker.TvShow.Rupaul as RU+import qualified Faker.TvShow.Seinfeld as SE+import qualified Faker.TvShow.SiliconValley as SI+import qualified Faker.TvShow.Simpsons as SS+import qualified Faker.TvShow.SouthPark as SO+import qualified Faker.TvShow.StarTrek as SR+import qualified Faker.TvShow.Stargate as SG+import qualified Faker.TvShow.StrangerThings as SH+import qualified Faker.TvShow.TheExpanse as TH+import qualified Faker.TvShow.TheItCrowd as TI+import qualified Faker.TvShow.TheThickOfIt as TO+import qualified Faker.TvShow.TwinPeaks as TW+import qualified Faker.TvShow.VentureBros as VE+import qualified Faker.University as UN+import qualified Faker.Vehicle as VE+import qualified Faker.Verbs as VE+import qualified Faker.WorldCup as WO+import qualified Faker.Yoda as YO++import Test.Hspec+import TestImport++isText :: Text -> Bool+isText x = T.length x >= 1++fakerSettings :: FakerSettings+fakerSettings = defaultFakerSettings++verifyFakes :: [Fake Text] -> IO [Bool]+verifyFakes funs = do+  let fs :: [IO Text] = map (generateWithSettings fakerSettings) funs+      gs :: [IO Bool] = map (\f -> isText <$> f) fs+  sequence gs++verifyFakeInt :: [Fake Int] -> IO [Bool]+verifyFakeInt funs = do+  let fs :: [IO Int] = map (generateWithSettings fakerSettings) funs+      gs :: [IO Bool] = map (\f -> (\x -> x >= 0) <$> f) fs+  sequence gs++spec :: Spec+spec = do+  describe "TextSpec" $ do+    it "Address" $ do+      let functions :: [Fake Text] =+            [ FA.country+            , FA.cityPrefix+            , FA.citySuffix+            , FA.countryCode+            , FA.countryCodeLong+            , FA.buildingNumber+            , FA.communityPrefix+            , FA.communitySuffix+            , FA.community+            , FA.streetSuffix+            , FA.secondaryAddress+            , FA.postcode+            , FA.state+            , FA.stateAbbr+            , FA.timeZone+            , FA.city+            , FA.streetName+            , FA.streetAddress+            , FA.fullAddress+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Ancient" $ do+      let functions :: [Fake Text] = [AN.god, AN.primordial, AN.hero, AN.titan]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "App" $ do+      let functions :: [Fake Text] = [AP.name, AP.version]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Appliance" $ do+      let functions :: [Fake Text] = [AP.brand, AP.equipment]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Artist" $ do+      let functions :: [Fake Text] = [AR.names]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Bank" $ do+      let functions :: [Fake Text] = [BA.name, BA.swiftBic]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Beer" $ do+      let functions :: [Fake Text] =+            [BE.name, BE.brand, BE.hop, BE.yeast, BE.malt, BE.style]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Book.CultureSeries" $ do+      let functions :: [Fake Text] =+            [ CE.books+            , CE.cultureShips+            , CE.cultureShipClasses+            , CE.cultureShipClassAbvs+            , CE.civs+            , CE.planets+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Book.Dune" $ do+      let functions :: [Fake Text] =+            [ DU.characters+            , DU.titles+            , DU.planets+            , DU.quotesGuildNavigator+            , DU.quotesEmperor+            , DU.quotesPaul+            , DU.quotesThufir+            , DU.quotesJessica+            , DU.quotesIrulan+            , DU.quotesMohiam+            , DU.quotesGurney+            , DU.quotesLeto+            , DU.quotesStilgar+            , DU.quotesLietKynes+            , DU.quotesPardotKynes+            , DU.quotesBaronHarkonnen+            , DU.quotesPiter+            , DU.quotesAlia+            , DU.quotesMapes+            , DU.quotesDuncan+            , DU.quotesYueh+            , DU.sayingsBeneGesserit+            , DU.sayingsFremen+            , DU.sayingsMentat+            , DU.sayingsMuaddib+            , DU.sayingsOrangeCatholicBible+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Book.LoveCraft" $ do+      let functions :: [Fake Text] =+            [LO.fhtagn, LO.deity, LO.location, LO.tome, LO.words]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Book" $ do+      let functions :: [Fake Text] =+            [BO.author, BO.title, BO.publisher, BO.genre]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "BossaNova" $ do+      let functions :: [Fake Text] = [BO.artists, BO.songs]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Business" $ do+      let functions :: [Fake Text] = [BU.creditCardNumbers, BU.creditCardTypes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Cannabis" $ do+      let functions :: [Fake Text] =+            [ CA.strains+            , CA.cannabinoidAbbreviations+            , CA.cannabinoids+            , CA.terpenes+            , CA.medicalUses+            , CA.healthBenefits+            , CA.categories+            , CA.types+            , CA.buzzwords+            , CA.brands+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "ChuckNorris" $ do+      let functions :: [Fake Text] = [CH.fact]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Code" $ do+      let functions :: [Fake Text] = [CO.asin]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Coffee" $ do+      let functions :: [Fake Text] =+            [ CO.country+            , CO.variety+            , CO.intensifier+            , CO.body+            , CO.descriptor+            , CO.name1+            , CO.name2+            , CO.notes+            , CO.blendName+            , CO.regionsColombia+            , CO.regionsBrazil+            , CO.regionsSumatra+            , CO.regionsEthiopia+            , CO.regionsHonduras+            , CO.regionsKenya+            , CO.regionsUganda+            , CO.regionsMexico+            , CO.regionsGuatemala+            , CO.regionsNicaragua+            , CO.regionsCostaRica+            , CO.regionsTanzania+            , CO.regionsElSalvador+            , CO.regionsRwanda+            , CO.regionsBurundi+            , CO.regionsPanama+            , CO.regionsYemen+            , CO.regionsIndia+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Coin" $ do+      let functions :: [Fake Text] = [CO.flip]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Color" $ do+      let functions :: [Fake Text] = [CO.name]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Commerce" $ do+      let functions :: [Fake Text] =+            [ CO.department+            , CO.productNameAdjective+            , CO.productNameMaterial+            , CO.productNameProduct+            , CO.promotionCodeAdjective+            , CO.promotionCodeNoun+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Company" $ do+      let functions :: [Fake Text] =+            [ CM.suffix+            , CM.buzzword+            , CM.bs+            , CM.name+            , CM.industry+            , CM.profession+            , CM.type'+            , CM.sicCode+            , CM.buzzword+            , CM.bs+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Company" $ do+      let functions :: [Fake Text] =+            [ CO.direction+            , CO.abbreviation+            , CO.azimuth+            , CO.cardinalWord+            , CO.cardinalAbbreviation+            , CO.cardinalAzimuth+            , CO.ordinalWord+            , CO.ordinalAbbreviation+            , CO.ordinalAzimuth+            , CO.halfWindWord+            , CO.halfWindAbbreviation+            , CO.halfWindAzimuth+            , CO.quarterWindWord+            , CO.quarterWindAbbreviation+            , CO.quarterWindAzimuth+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Construction" $ do+      let functions :: [Fake Text] =+            [ CO.materials+            , CO.subcontractCategories+            , CO.heavyEquipment+            , CO.roles+            , CO.trades+            , CO.standardCostCodes+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Cosmere" $ do+      let functions :: [Fake Text] =+            [ CO.aons+            , CO.shardWorlds+            , CO.shards+            , CO.surges+            , CO.knightsRadiant+            , CO.metals+            , CO.allomancers+            , CO.feruchemists+            , CO.heralds+            , CO.sprens+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Creature.Animal" $ do+      let functions :: [Fake Text] = [AN.name]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Creature.Cat" $ do+      let functions :: [Fake Text] = [CA.name, CA.breed, CA.registry]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Creature.Dog" $ do+      let functions :: [Fake Text] =+            [ DO.name+            , DO.breed+            , DO.sound+            , DO.memePhrase+            , DO.age+            , DO.coatLength+            , DO.size+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Creature.Horuse" $ do+      let functions :: [Fake Text] = [HO.name, HO.breed]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Cryptocoin" $ do+      let functions :: [Fake Text] = [CO.coin]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Currency" $ do+      let functions :: [Fake Text] = [CU.name, CU.code, CU.symbol]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "DcComics" $ do+      let functions :: [Fake Text] =+            [DC.hero, DC.heroine, DC.villain, DC.name, DC.title]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Demographic" $ do+      let functions :: [Fake Text] =+            [ DE.race+            , DE.sex+            , DE.demonym+            , DE.educationalAttainment+            , DE.maritalStatus+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Dessert" $ do+      let functions :: [Fake Text] = [DE.variety, DE.topping, DE.flavor]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Educator" $ do+      let functions :: [Fake Text] =+            [ ED.name+            , ED.secondary+            , ED.tertiaryType+            , ED.tertiaryDegreeSubject+            , ED.tertiaryDegreeType+            , ED.tertiaryCourseNumber+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "ElectricalComponents" $ do+      let functions :: [Fake Text] =+            [EC.active, EC.passive, EC.electromechanical]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Esport" $ do+      let functions :: [Fake Text] =+            [ES.players, ES.teams, ES.events, ES.leagues, ES.games]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "File" $ do+      let functions :: [Fake Text] = [FI.extension, FI.mimeType]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Finance" $ do+      let functions :: [Fake Text] =+            [ FI.visa+            , FI.mastercard+            , FI.discover+            , FI.dinersClub+            , FI.jcb+            , FI.switch+            , FI.solo+            , FI.dankort+            , FI.maestro+            , FI.forbrugsforeningen+            , FI.laser+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Food" $ do+      let functions :: [Fake Text] =+            [ FO.dish+            , FO.descriptions+            , FO.ingredients+            , FO.fruits+            , FO.vegetables+            , FO.spices+            , FO.measurements+            , FO.measurementSizes+            , FO.metricMeasurements+            , FO.sushi+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "FunnyName" $ do+      let functions :: [Fake Text] = [FU.name]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Game.Dota" $ do+      let functions :: [Fake Text] =+            [ DO.hero+            , DO.item+            , DO.team+            , DO.player+            , DO.abaddonQuote+            , DO.alchemistQuote+            , DO.axeQuote+            , DO.beastmasterQuote+            , DO.brewmasterQuote+            , DO.bristlebackQuote+            , DO.centaurQuote+            , DO.chaosKnightQuote+            , DO.clockwerkQuote+            , DO.doomQuote+            , DO.dragonKnightQuote+            , DO.earthSpiritQuote+            , DO.earthshakerQuote+            , DO.elderTitanQuote+            , DO.huskarQuote+            , DO.ioQuote+            , DO.kunkkaQuote+            , DO.legionCommanderQuote+            , DO.lifestealerQuote+            , DO.lycanQuote+            , DO.magnusQuote+            , DO.nightStalkerQuote+            , DO.omniknightQuote+            , DO.phoenixQuote+            , DO.pudgeQuote+            , DO.sandKingQuote+            , DO.slardarQuote+            , DO.spiritBreakerQuote+            , DO.svenQuote+            , DO.tidehunterQuote+            , DO.timbersawQuote+            , DO.tinyQuote+            , DO.tuskQuote+            , DO.underlordQuote+            , DO.undyingQuote+            , DO.wraithKingQuote+            , DO.meepoQuote+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Game.ElderScrolls" $ do+      let functions :: [Fake Text] =+            [ EL.race+            , EL.creature+            , EL.region+            , EL.dragon+            , EL.city+            , EL.firstName+            , EL.lastName+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Game.Fallout" $ do+      let functions :: [Fake Text] =+            [FA.characters, FA.factions, FA.locations, FA.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Game.HalfLife" $ do+      let functions :: [Fake Text] = [HA.character, HA.enemy, HA.location]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Game.Heroes" $ do+      let functions :: [Fake Text] = [HE.names, HE.specialties, HE.klasses]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Game.HeroesOfTheStorm" $ do+      let functions :: [Fake Text] =+            [HS.battlegrounds, HS.classes, HS.heroes, HS.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Game.Myst" $ do+      let functions :: [Fake Text] =+            [MY.games, MY.creatures, MY.characters, MY.ages, MY.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Game.Overwatch" $ do+      let functions :: [Fake Text] = [OV.heroes, OV.locations, OV.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Game.Pokemon" $ do+      let functions :: [Fake Text] = [PO.names, PO.locations, PO.moves]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Game.SonicTheHedgehog" $ do+      let functions :: [Fake Text] = [SO.zone, SO.character, SO.game]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Game.SonicTheHedgehog" $ do+      let functions :: [Fake Text] = [SO.zone, SO.character, SO.game]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Game.SuperSmashBros" $ do+      let functions :: [Fake Text] = [SU.fighter, SU.stage]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Game.Witcher" $ do+      let functions :: [Fake Text] =+            [ WI.characters+            , WI.witchers+            , WI.schools+            , WI.locations+            , WI.quotes+            , WI.monsters+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Game.WorldOfwarcraft" $ do+      let functions :: [Fake Text] = [WO.hero, WO.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Game.Zelda" $ do+      let functions :: [Fake Text] =+            [ZE.games, ZE.characters, ZE.locations, ZE.items]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Gender" $ do+      let functions :: [Fake Text] = [GE.types, GE.binaryTypes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "GreekPhilosophers" $ do+      let functions :: [Fake Text] = [GR.names, GR.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Hacker" $ do+      let functions :: [Fake Text] =+            [HA.abbreviation, HA.adjective, HA.noun, HA.verb, HA.ingverb]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Hipster" $ do+      let functions :: [Fake Text] = [HI.words]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "House" $ do+      let functions :: [Fake Text] = [HO.furniture, HO.rooms]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Industry" $ do+      let functions :: [Fake Text] =+            [IN.industry, IN.superSector, IN.sector, IN.subSector]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Internet" $ do+      let functions :: [Fake Text] =+            [ IN.freeEmail+            , IN.domainSuffix+            , IN.userAgentAol+            , IN.userAgentChrome+            , IN.userAgentFirefox+            , IN.userAgentInternetExplorer+            , IN.userAgentNetscape+            , IN.userAgentOpera+            , IN.userAgentSafari+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "JapaneseMedia.DragonBall" $ do+      let functions :: [Fake Text] = [DR.characters]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "JapaneseMedia.OnePiece" $ do+      let functions :: [Fake Text] =+            [ ON.characters+            , ON.seas+            , ON.islands+            , ON.locations+            , ON.quotes+            , ON.akumasNoMi+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "JapaneseMedia.SwordArtOnline" $ do+      let functions :: [Fake Text] =+            [SW.realName, SW.gameName, SW.location, SW.item]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Job" $ do+      let functions :: [Fake Text] =+            [ JO.field+            , JO.seniority+            , JO.position+            , JO.keySkills+            , JO.employmentType+            , JO.educationLevel+            , JO.title+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Kpop" $ do+      let functions :: [Fake Text] =+            [ KP.iGroups+            , KP.iiGroups+            , KP.iiiGroups+            , KP.girlGroups+            , KP.boyBands+            , KP.solo+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "LeagueOfLegends" $ do+      let functions :: [Fake Text] =+            [ LE.champion+            , LE.location+            , LE.quote+            , LE.summonerSpell+            , LE.masteries+            , LE.rank+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Lorem" $ do+      let functions :: [Fake Text] = [LM.words, LM.supplemental]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Markdown" $ do+      let functions :: [Fake Text] = [MA.headers, MA.emphasis]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Marketing" $ do+      let functions :: [Fake Text] = [MA.buzzwords]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Measurement" $ do+      let functions :: [Fake Text] =+            [ ME.height+            , ME.length+            , ME.volume+            , ME.weight+            , ME.metricHeight+            , ME.metricLength+            , ME.metricVolume+            , ME.metricWeight+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Military" $ do+      let functions :: [Fake Text] =+            [ MI.armyRank+            , MI.marinesRank+            , MI.navyRank+            , MI.airForceRank+            , MI.dodPaygrade+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Movie.BackToTheFuture" $ do+      let functions :: [Fake Text] = [BA.dates, BA.characters, BA.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Movie.Ghostbusters" $ do+      let functions :: [Fake Text] = [GH.actors, GH.characters, GH.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Movie.GratefulDead" $ do+      let functions :: [Fake Text] = [GR.players, GR.songs]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Movie.HarryPotter" $ do+      let functions :: [Fake Text] =+            [ HA.characters+            , HA.locations+            , HA.quotes+            , HA.books+            , HA.houses+            , HA.spells+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Movie.HitchhikersGuideToTheGalaxy" $ do+      let functions :: [Fake Text] =+            [ HI.characters+            , HI.locations+            , HI.marvinQuote+            , HI.planets+            , HI.quotes+            , HI.species+            , HI.starships+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Movie.Hobbit" $ do+      let functions :: [Fake Text] =+            [HO.character, HO.thorinsCompany, HO.quote, HO.location]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Movie.Lebowski" $ do+      let functions :: [Fake Text] = [LE.actors, LE.characters, LE.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Movie.LordOfTheRings" $ do+      let functions :: [Fake Text] = [LO.characters, LO.locations, LO.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Movie.PrincessBride" $ do+      let functions :: [Fake Text] = [PR.characters, PR.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Movie.StarWars" $ do+      let functions :: [Fake Text] =+            [ ST.characters+            , ST.callSquadrons+            , ST.droids+            , ST.planets+            , ST.species+            , ST.vehicles+            , ST.wookieeWords+            , ST.callNumbers+            , ST.callSign+            , ST.quotesAdmiralAckbar+            , ST.quotesAhsokaTano+            , ST.quotesAsajjVentress+            , ST.quotesBendu+            , ST.quotesBobaFett+            , ST.quotesC3po+            , ST.quotesCountDooku+            , ST.quotesDarthCaedus+            , ST.quotesDarthVader+            , ST.quotesEmperorPalpatine+            , ST.quotesFinn+            , ST.quotesGrandAdmiralThrawn+            , ST.quotesGrandMoffTarkin+            , ST.quotesGreedo+            , ST.quotesHanSolo+            , ST.quotesJabbaTheHutt+            , ST.quotesJarJarBinks+            , ST.quotesK2so+            , ST.quotesKyloRen+            , ST.quotesLandoCalrissian+            , ST.quotesLeiaOrgana+            , ST.quotesLukeSkywalker+            , ST.quotesMaceWindu+            , ST.quotesMazKanata+            , ST.quotesObiWanKenobi+            , ST.quotesPadmeAmidala+            , ST.quotesQuiGonJinn+            , ST.quotesRey+            , ST.quotesShmiSkywalker+            , ST.quotesYoda+            , ST.alternateCharacterSpellingsAdmiralAckbar+            , ST.alternateCharacterSpellingsAhsokaTano+            , ST.alternateCharacterSpellingsAnakinSkywalker+            , ST.alternateCharacterSpellingsAsajjVentress+            , ST.alternateCharacterSpellingsBendu+            , ST.alternateCharacterSpellingsBobaFett+            , ST.alternateCharacterSpellingsC3po+            , ST.alternateCharacterSpellingsCountDooku+            , ST.alternateCharacterSpellingsDarthCaedus+            , ST.alternateCharacterSpellingsDarthVader+            , ST.alternateCharacterSpellingsEmperorPalpatine+            , ST.alternateCharacterSpellingsFinn+            , ST.alternateCharacterSpellingsGeneralHux+            , ST.alternateCharacterSpellingsGrandAdmiralThrawn+            , ST.alternateCharacterSpellingsGrandMoffTarkin+            , ST.alternateCharacterSpellingsGreedo+            , ST.alternateCharacterSpellingsHanSolo+            , ST.alternateCharacterSpellingsJabbaTheHutt+            , ST.alternateCharacterSpellingsJarJarBinks+            , ST.alternateCharacterSpellingsK2so+            , ST.alternateCharacterSpellingsKyloRen+            , ST.alternateCharacterSpellingsLandoCalrissian+            , ST.alternateCharacterSpellingsLeiaOrgana+            , ST.alternateCharacterSpellingsLukeSkywalker+            , ST.alternateCharacterSpellingsMaceWindu+            , ST.alternateCharacterSpellingsMazKanata+            , ST.alternateCharacterSpellingsObiWanKenobi+            , ST.alternateCharacterSpellingsPadmeAmidala+            , ST.alternateCharacterSpellingsQuiGonJinn+            , ST.alternateCharacterSpellingsRey+            , ST.alternateCharacterSpellingsShmiSkywalker+            , ST.alternateCharacterSpellingsYoda+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Movie.VForVendetta" $ do+      let functions :: [Fake Text] = [VF.characters, VF.speeches, VF.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Movie" $ do+      let functions :: [Fake Text] = [MO.quote]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Music.Opera" $ do+      let functions :: [Fake Text] =+            [ OP.italianByGiuseppeVerdi+            , OP.italianByGioacchinoRossini+            , OP.italianByGaetanoDonizetti+            , OP.italianByVincenzoBellini+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Music.Phish" $ do+      let functions :: [Fake Text] = [PH.song]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Music.RockBand" $ do+      let functions :: [Fake Text] = [RO.name]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Music.UmphreysMcgee" $ do+      let functions :: [Fake Text] = [UM.song]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Music" $ do+      let functions :: [Fake Text] =+            [MU.instruments, MU.bands, MU.albums, MU.genres]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Name" $ do+      let functions :: [Fake Text] =+            [ NA.maleFirstName+            , NA.femaleFirstName+            , NA.prefix+            , NA.suffix+            , NA.lastName+            , NA.name+            , NA.nameWithMiddle+            , NA.firstName+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Nation" $ do+      let functions :: [Fake Text] =+            [NA.nationality, NA.language, NA.capitalCity, NA.flagEmoji]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "NatoPhoneticAlphabet" $ do+      let functions :: [Fake Text] = [NA.codeWord]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "PhoneNumber" $ do+      let functions :: [Fake Text] =+            [PH.formats, PH.countryCode, PH.cellPhoneFormat]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "ProgrammingLanguage" $ do+      let functions :: [Fake Text] = [PR.name, PR.creator]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Quote.Shakespeare" $ do+      let functions :: [Fake Text] =+            [SH.hamlet, SH.asYouLikeIt, SH.kingRichardIii, SH.romeoAndJuliet]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Quote" $ do+      let functions :: [Fake Text] =+            [ QU.famousLastWords+            , QU.matz+            , QU.mostInterestingManInTheWorld+            , QU.robin+            , QU.singularSiegler+            , QU.yoda+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Relationship" $ do+      let functions :: [Fake Text] =+            [ RE.inLaw+            , RE.spouse+            , RE.parent+            , RE.sibling+            , RE.familialDirect+            , RE.familialExtended+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Restaurant" $ do+      let functions :: [Fake Text] =+            [ RE.nameSuffix+            , RE.type'+            , RE.description+            , RE.review+            , RE.namePrefix+            , RE.name+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Science" $ do+      let functions :: [Fake Text] =+            [SC.element, SC.elementSymbol, SC.scientist]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "SlackEmoji" $ do+      let functions :: [Fake Text] =+            [ SL.people+            , SL.nature+            , SL.foodAndDrink+            , SL.celebration+            , SL.activity+            , SL.travelAndPlaces+            , SL.objectsAndSymbols+            , SL.custom+            , SL.emoji+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Source" $ do+      let functions :: [Fake Text] =+            [ SO.helloWorldRuby+            , SO.helloWorldJavascript+            , SO.printRuby+            , SO.printJavascript+            , SO.print1To10Ruby+            , SO.print1To10Javascript+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Space" $ do+      let functions :: [Fake Text] =+            [ SP.planet+            , SP.moon+            , SP.galaxy+            , SP.nebula+            , SP.starCluster+            , SP.constellation+            , SP.star+            , SP.agency+            , SP.agencyAbv+            , SP.nasaSpaceCraft+            , SP.company+            , SP.distanceMeasurement+            , SP.meteorite+            , SP.launchVehicle+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Sport.Basketball" $ do+      let functions :: [Fake Text] =+            [BA.teams, BA.players, BA.coaches, BA.positions]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Sport.Football" $ do+      let functions :: [Fake Text] =+            [FO.teams, FO.players, FO.coaches, FO.competitions, FO.positions]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Subscription" $ do+      let functions :: [Fake Text] =+            [ SU.plans+            , SU.statuses+            , SU.paymentMethods+            , SU.subscriptionTerms+            , SU.paymentTerms+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Superhero" $ do+      let functions :: [Fake Text] =+            [SU.power, SU.prefix, SU.suffix, SU.descriptor, SU.name]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Team" $ do+      let functions :: [Fake Text] = [TE.creature, TE.sport, TE.mascot, TE.name]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "University" $ do+      let functions :: [Fake Text] = [UN.prefix, UN.suffix, UN.name]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Vehicle" $ do+      let functions :: [Fake Text] =+            [ VE.manufacture+            , VE.makes+            , VE.colors+            , VE.transmissions+            , VE.driveTypes+            , VE.fuelTypes+            , VE.styles+            , VE.carTypes+            , VE.carOptions+            , VE.standardSpecs+            , VE.licensePlate+            , VE.modelsByMakeBMW+            , VE.modelsByMakeAudi+            , VE.modelsByMakeToyota+            , VE.modelsByMakeChevy+            , VE.modelsByMakeFord+            , VE.modelsByMakeDodge+            , VE.modelsByMakeLincoln+            , VE.modelsByMakeBuick+            , VE.modelsByMakeHonda+            , VE.modelsByMakeNissan+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+      let ifunctions :: [Fake Int] = [VE.doors, VE.engineSizes]+      bools <- verifyFakeInt ifunctions+      (and bools) `shouldBe` True+    it "Verbs" $ do+      let functions :: [Fake Text] =+            [VE.base, VE.past, VE.pastParticiple, VE.simplePresent, VE.ingForm]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "WorldCup" $ do+      let functions :: [Fake Text] =+            [ WO.teams+            , WO.stadiums+            , WO.cities+            , WO.groupsGroupA+            , WO.groupsGroupB+            , WO.groupsGroupC+            , WO.groupsGroupD+            , WO.groupsGroupE+            , WO.groupsGroupF+            , WO.groupsGroupG+            , WO.groupsGroupH+            , WO.rostersEgyptCoach+            , WO.rostersEgyptGoalkeepers+            , WO.rostersEgyptDefenders+            , WO.rostersEgyptMidfielders+            , WO.rostersEgyptForwards+            , WO.rostersRussiaCoach+            , WO.rostersRussiaGoalkeepers+            , WO.rostersRussiaDefenders+            , WO.rostersRussiaMidfielders+            , WO.rostersRussiaForwards+            , WO.rostersSaudiArabiaCoach+            , WO.rostersSaudiArabiaGoalkeepers+            , WO.rostersSaudiArabiaDefenders+            , WO.rostersSaudiArabiaMidfielders+            , WO.rostersSaudiArabiaForwards+            , WO.rostersUruguayCoach+            , WO.rostersUruguayGoalkeepers+            , WO.rostersUruguayDefenders+            , WO.rostersUruguayMidfielders+            , WO.rostersUruguayForwards+            , WO.rostersIranCoach+            , WO.rostersIranGoalkeepers+            , WO.rostersIranDefenders+            , WO.rostersIranMidfielders+            , WO.rostersIranForwards+            , WO.rostersMoroccoCoach+            , WO.rostersMoroccoGoalkeepers+            , WO.rostersMoroccoDefenders+            , WO.rostersMoroccoMidfielders+            , WO.rostersMoroccoForwards+            , WO.rostersPortugalCoach+            , WO.rostersPortugalGoalkeepers+            , WO.rostersPortugalDefenders+            , WO.rostersPortugalMidfielders+            , WO.rostersPortugalForwards+            , WO.rostersSpainCoach+            , WO.rostersSpainGoalkeepers+            , WO.rostersSpainDefenders+            , WO.rostersSpainMidfielders+            , WO.rostersSpainForwards+            , WO.rostersAustraliaCoach+            , WO.rostersAustraliaGoalkeepers+            , WO.rostersAustraliaDefenders+            , WO.rostersAustraliaMidfielders+            , WO.rostersAustraliaForwards+            , WO.rostersDenmarkCoach+            , WO.rostersDenmarkGoalkeepers+            , WO.rostersDenmarkDefenders+            , WO.rostersDenmarkMidfielders+            , WO.rostersDenmarkForwards+            , WO.rostersFranceCoach+            , WO.rostersFranceGoalkeepers+            , WO.rostersFranceDefenders+            , WO.rostersFranceMidfielders+            , WO.rostersFranceForwards+            , WO.rostersPeruCoach+            , WO.rostersPeruGoalkeepers+            , WO.rostersPeruDefenders+            , WO.rostersPeruMidfielders+            , WO.rostersPeruForwards+            , WO.rostersArgentinaCoach+            , WO.rostersArgentinaGoalkeepers+            , WO.rostersArgentinaDefenders+            , WO.rostersArgentinaMidfielders+            , WO.rostersArgentinaForwards+            , WO.rostersCroatiaCoach+            , WO.rostersCroatiaGoalkeepers+            , WO.rostersCroatiaDefenders+            , WO.rostersCroatiaMidfielders+            , WO.rostersCroatiaForwards+            , WO.rostersIcelandCoach+            , WO.rostersIcelandGoalkeepers+            , WO.rostersIcelandDefenders+            , WO.rostersIcelandMidfielders+            , WO.rostersIcelandForwards+            , WO.rostersNigeriaCoach+            , WO.rostersNigeriaGoalkeepers+            , WO.rostersNigeriaDefenders+            , WO.rostersNigeriaMidfielders+            , WO.rostersNigeriaForwards+            , WO.rostersBrazilCoach+            , WO.rostersBrazilGoalkeepers+            , WO.rostersBrazilDefenders+            , WO.rostersBrazilMidfielders+            , WO.rostersBrazilForwards+            , WO.rostersCostaRicaCoach+            , WO.rostersCostaRicaGoalkeepers+            , WO.rostersCostaRicaDefenders+            , WO.rostersCostaRicaMidfielders+            , WO.rostersCostaRicaForwards+            , WO.rostersSerbiaCoach+            , WO.rostersSerbiaGoalkeepers+            , WO.rostersSerbiaDefenders+            , WO.rostersSerbiaMidfielders+            , WO.rostersSerbiaForwards+            , WO.rostersSwitzerlandCoach+            , WO.rostersSwitzerlandGoalkeepers+            , WO.rostersSwitzerlandDefenders+            , WO.rostersSwitzerlandMidfielders+            , WO.rostersSwitzerlandForwards+            , WO.rostersGermanyCoach+            , WO.rostersGermanyGoalkeepers+            , WO.rostersGermanyDefenders+            , WO.rostersGermanyMidfielders+            , WO.rostersGermanyForwards+            , WO.rostersMexicoCoach+            , WO.rostersMexicoGoalkeepers+            , WO.rostersMexicoDefenders+            , WO.rostersMexicoMidfielders+            , WO.rostersMexicoForwards+            , WO.rostersSouthKoreaCoach+            , WO.rostersSouthKoreaGoalkeepers+            , WO.rostersSouthKoreaDefenders+            , WO.rostersSouthKoreaMidfielders+            , WO.rostersSouthKoreaForwards+            , WO.rostersSwedenCoach+            , WO.rostersSwedenGoalkeepers+            , WO.rostersSwedenDefenders+            , WO.rostersSwedenMidfielders+            , WO.rostersSwedenForwards+            , WO.rostersBelgiumCoach+            , WO.rostersBelgiumGoalkeepers+            , WO.rostersBelgiumDefenders+            , WO.rostersBelgiumMidfielders+            , WO.rostersBelgiumForwards+            , WO.rostersEnglandCoach+            , WO.rostersEnglandGoalkeepers+            , WO.rostersEnglandDefenders+            , WO.rostersEnglandMidfielders+            , WO.rostersEnglandForwards+            , WO.rostersPanamaCoach+            , WO.rostersPanamaGoalkeepers+            , WO.rostersPanamaDefenders+            , WO.rostersPanamaMidfielders+            , WO.rostersPanamaForwards+            , WO.rostersTunisiaCoach+            , WO.rostersTunisiaGoalkeepers+            , WO.rostersTunisiaDefenders+            , WO.rostersTunisiaMidfielders+            , WO.rostersTunisiaForwards+            , WO.rostersColumbiaCoach+            , WO.rostersColumbiaGoalkeepers+            , WO.rostersColumbiaDefenders+            , WO.rostersColumbiaMidfielders+            , WO.rostersColumbiaForwards+            , WO.rostersJapanCoach+            , WO.rostersJapanGoalkeepers+            , WO.rostersJapanDefenders+            , WO.rostersJapanMidfielders+            , WO.rostersJapanForwards+            , WO.rostersPolandCoach+            , WO.rostersPolandGoalkeepers+            , WO.rostersPolandDefenders+            , WO.rostersPolandMidfielders+            , WO.rostersPolandForwards+            , WO.rostersSenegalCoach+            , WO.rostersSenegalGoalkeepers+            , WO.rostersSenegalDefenders+            , WO.rostersSenegalMidfielders+            , WO.rostersSenegalForwards+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "Yoda" $ do+      let functions :: [Fake Text] = [YO.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.AquaTeenHungerForce" $ do+      let functions :: [Fake Text] = [AQ.character]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.BoJackHorseman" $ do+      let functions :: [Fake Text] = [BO.character, BO.quote, BO.tongueTwister]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.BreakingBad" $ do+      let functions :: [Fake Text] = [BR.character, BR.episode]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.Buffy" $ do+      let functions :: [Fake Text] =+            [BU.characters, BU.quotes, BU.celebrities, BU.bigBads, BU.episodes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.Community" $ do+      let functions :: [Fake Text] = [CO.characters, CO.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.DrWho" $ do+      let functions :: [Fake Text] =+            [ DR.character+            , DR.theDoctors+            , DR.actors+            , DR.catchPhrases+            , DR.quotes+            , DR.villians+            , DR.species+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.DumbAndDumber" $ do+      let functions :: [Fake Text] = [DD.actors, DD.characters, DD.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.FamilyGuy" $ do+      let functions :: [Fake Text] = [FA.character, FA.location, FA.quote]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.FreshPrinceOfBelAir" $ do+      let functions :: [Fake Text] = [FR.characters, FR.celebrities, FR.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.Friends" $ do+      let functions :: [Fake Text] = [FI.characters, FI.locations, FI.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.Friends" $ do+      let functions :: [Fake Text] = [FI.characters, FI.locations, FI.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.GameOfThrones" $ do+      let functions :: [Fake Text] =+            [GA.characters, GA.houses, GA.cities, GA.quotes, GA.dragons]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.HeyArnold" $ do+      let functions :: [Fake Text] = [HE.characters, HE.locations, HE.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.HowIMetYourMother" $ do+      let functions :: [Fake Text] =+            [HI.character, HI.catchPhrase, HI.highFive, HI.quote]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.MichaelScott" $ do+      let functions :: [Fake Text] = [MI.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.NewGirl" $ do+      let functions :: [Fake Text] = [NE.characters, NE.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.ParksAndRec" $ do+      let functions :: [Fake Text] = [PA.characters, PA.cities]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.RickAndMorty" $ do+      let functions :: [Fake Text] = [RI.characters, RI.locations, RI.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.Rupaul" $ do+      let functions :: [Fake Text] = [RU.queens, RU.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.Seinfeld" $ do+      let functions :: [Fake Text] = [SE.character, SE.quote, SE.business]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.Seinfeld" $ do+      let functions :: [Fake Text] = [SE.character, SE.quote, SE.business]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.SiliconValley" $ do+      let functions :: [Fake Text] =+            [ SI.characters+            , SI.companies+            , SI.quotes+            , SI.apps+            , SI.inventions+            , SI.mottos+            , SI.urls+            , SI.email+            ]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.Simpsons" $ do+      let functions :: [Fake Text] = [SS.characters, SS.locations, SS.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.SouthPark" $ do+      let functions :: [Fake Text] = [SO.characters, SO.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.StarTrek" $ do+      let functions :: [Fake Text] =+            [SR.character, SR.location, SR.specie, SR.villain]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.StarGate" $ do+      let functions :: [Fake Text] = [SG.characters, SG.planets, SG.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.StrangerThings" $ do+      let functions :: [Fake Text] = [SH.character, SH.quote]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.TheExpanse" $ do+      let functions :: [Fake Text] =+            [TH.characters, TH.locations, TH.ships, TH.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.TheItCrowd" $ do+      let functions :: [Fake Text] =+            [TI.actors, TI.characters, TI.emails, TI.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.TheThickOfIt" $ do+      let functions :: [Fake Text] =+            [TO.characters, TO.positions, TO.departments]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.TwinPeaks" $ do+      let functions :: [Fake Text] = [TW.characters, TW.locations, TW.quotes]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True+    it "TvShow.VentureBros" $ do+      let functions :: [Fake Text] =+            [VE.character, VE.organization, VE.vehicle, VE.quote]+      bools <- verifyFakes functions+      (and bools) `shouldBe` True