BSD-3-Clause licensed by Sibi Prabakaran
Maintained by
This version can be pinned in stack with:fakedata-0.6.1@sha256:7c00ec8477ad85576b3180d39622171e63f627cf85552eacdc4843811d1ae369,19109

Module documentation for 0.6.1

fakedata Hackage Stackage Nightly Stackage LTS Build Status


This library is a port of Ruby’s faker. It’s a library for producing fake data such as names, addressess and phone numbers. Note that it directly uses the source data from that library, so the quality of fake data is quite high!


Generating address

~/g/fakedata (master) $ stack ghci
λ> import Faker.Address
λ> address <- generate fullAddress
λ> address
"Suite 153 153 Langosh Way, East Antony, MI 15342-5123"

Generating name

λ> fullName <- generate name
λ> fullName
"Antony Langosh"

Generate quotes from the movie Back to the Future

λ> import Faker.Movie.BackToTheFuture
λ> import Faker.Combinators
λ> qs <- generate $ listOf 5 quote
λ> qs
[ "Yes. Yes. I'm George. George McFly. I'm your density. I mean, your destiny."
, "Hello? Hello? Anybody home? Huh? Think, McFly. Think! I gotta have time to get them retyped. Do you realize what would happen if I hand in my reports in your handwriting? I'll get fired. You wouldn't want that to happen, would ya? Would ya?"
, "Lorraine. My density has brought me to you."
, "See you in about 30 years."
, "You really think I ought to swear?"

Combining Fake datas

{-#LANGUAGE RecordWildCards#-}

import Faker
import Faker.Name
import Faker.Address
import Data.Text

data Person = Person {
    personName :: Text,
    personAddress :: Text
} deriving (Show, Eq)

fakePerson :: Fake Person
fakePerson = do
    personName <- name
    personAddress <- fullAddress
    pure $ Person{..}

main :: IO ()
main = do
    person <- generate fakePerson
    print person

And on executing them:

$ stack name.hs
  { personName = "Antony Langosh"
  , personAddress = "Suite 599 599 Brakus Flat, South Mason, MT 59962-6876"

You would have noticed in the above output that the name and address are the same as generated before in the GHCi REPL. That’s because, by default all the generated data are deterministic. If you want a different set of output each time, you would have to modify the random generator output:

main :: IO ()
main = do
    gen <- newStdGen
    let settings = setRandomGen gen defaultFakerSettings
    person <- generateWithSettings settings fakePerson
    print person

And on executing the program, you will get a different output:

  { personName = "Ned Effertz Sr."
  , personAddress = "Suite 158 1580 Schulist Mall, Schulistburgh, NY 15804-3392"

The above program can be even minimized like this:

main :: IO ()
main = do
    let settings = setNonDeterministic defaultFakerSettings
    person <- generateWithSettings settings fakePerson
    print person



λ> import Faker.Address
λ> item <- generate $ listOf 5 country
λ> item
["Ecuador","French Guiana","Faroe Islands","Canada","Armenia"]


λ> item <- generate $ oneof [country, fullAddress]
λ> item
"Suite 599 599 Brakus Flat, South Mason, MT 59962-6876"


λ> import qualified Faker.Address as AD
λ> item :: Text <- generate $ suchThat (\x -> (T.length x > 5))
λ> item
λ> item :: Text <- generate $ suchThat (\x -> (T.length x > 8))
λ> item
"French Guiana"

For seeing the full list of combinators, see the module documentation of Faker.Combinators.

Comparision with other libraries

There are two other libraries in the Hackage providing fake data:

The problem with both the above libraries is that the library covers only a very small amount of fake data source. I wanted to have an equivalent functionality with something like faker. Also, most of the combinators in this packages has been inspired (read as taken) from the fake library. Also, fakedata offers fairly good amount of support of different locales. Also since we rely on an external data source, we get free updates and high quality data source with little effort. Also, it’s easier to extend the library with it’s own data source if we want to do it that way.


Benjamin Curtis for his Ruby faker library from which the data source is taken from.

Icons made by Freepik from Flaticon.


Changelog for fakedata


  • Add Semigroup and Monoid instances to Fake
  • Doc fix: Remove broken links


  • Fix API for “ar” locale. Add test coverage.
  • Bug fixed in the following locales: ca, bg, da-DK, en-NEP, en-ZA, fr-CA, fr-CH, fr, hy, id, ja, pt, uk, zh-CN, zh-TW
  • New function to Address module: mailBox
  • Update in following data sources:
    • en/color.yml
    • en-NZ.yml
    • en/overwatch.yml
    • en/phone_number.yml
    • en/shakespeare.yml
    • fa.yml
    • pt-BR.yml
  • New function in Educator module: degree, courseName
  • New function in Gender module: shortBinaryTypes

Breaking changes

  • Educator module:
    • Rename tertiaryDegreeSubject to subject
    • Rename name function to schoolName
    • Rename tertiaryType function to tertiaryUniversityType.


  • Move remaining internal modules into other-module: Config, Faker.TH


  • Move Provider modules into other-modules. This makes the haddock much more readable.
  • Update to various en data sources: color.yml, super_smash_bros.
  • Fix name of FakerTvShow.DrWho module: villains (from villians).
  • New locale addition: en-TH, th
  • Modification of other locales: fr-CA, ja


  • Make it compatbile with ghc-8.8.1


  • Update fake data source
  • Improve performance and add test coverage
  • Fix various bugs
  • Add brands function to the module Faker.Cannabis


  • Add meepoQuote function to the module Faker.Game.Dota
  • Add Faker.Music.Opera module
  • Update fake data source


  • Fix bug in Book module


  • Add sicCode function in Company module
  • New Construction module
  • New Basketball module
  • New Horse module
  • New Finance module
  • Move Football under Sport module
  • Bug fixes in some file formats
  • Fix bugs in the Creature module
  • Add for new contributors

Initial version released