Как я могу генерировать случайные значения в Haskell для любого значения объекта aeson

Я начал кодировать Haskell несколько недель назад. Я пытаюсь сделать что-то вроде случайного генератора JSON, используя aeson.

Предположим, что у меня есть такой объект json:

{
    name: "bob",
    age: 13,
    role: "admin"
}

Когда я использую aeson для его декодирования, я получаю следующее:

let Just json = decode str :: Maybe Object

-- fromList [("name",String "bob"),("age",Number 13.0),("role",String "admin")]

Я хочу создать список объектов JSON на основе "модели" боба:

[
 {
   name: <any random string>,
   age: <any random number>,
   role: <any random string>
 },
 ...
]

Я знаю, что мне нужно fmap по значениям HashMap, но я понятия не имею, как я могу создавать случайные значения на основе их типов.

Меня пока не беспокоят другие сложные значения, которые могут появиться в полях JSON. Сейчас я сосредоточен на числах и строках.


person Augusto Dias    schedule 06.09.2019    source источник
comment
Если у вас есть тип, подобный data Person = Person {name :: String, age :: Int, role :: String}, преобразование в JSON и из него довольно тривиально. Можно сосредоточиться на вопросе о том, как сгенерировать случайное значение типа Person.   -  person chepner    schedule 06.09.2019
comment
Большое спасибо! Я сосредоточился на неправильной стороне вопроса   -  person Augusto Dias    schedule 07.09.2019
comment
Если у вас есть тип, подобный Person, как предлагает @chepner, вы можете сделать его экземпляром Random. Вот ответ, который показывает, как это сделать для другого типа: stackoverflow.com/a/47166776/126014   -  person Mark Seemann    schedule 09.09.2019