UNPKG

1.09 kBJavaScriptView Raw
1/* @flow weak */
2"use strict";
3
4var arbitraryAssert = require("./arbitraryAssert.js");
5var array = require("./array.js");
6var generator = require("./generator.js");
7var pair = require("./pair.js");
8var string = require("./string.js");
9var utils = require("./utils.js");
10
11function makeMapShow(elShow) {
12 return function (m) {
13 return "{" + Object.keys(m).map(function (k) {
14 return k + ": " + elShow(m[k]);
15 }).join(", ") + "}";
16 };
17}
18
19/**
20 - `dict.generator(gen: generator a): generator (dict a)`
21*/
22function generateDict(gen) {
23 var pairGen = generator.pair(string.string.generator, gen);
24 var arrayGen = generator.array(pairGen);
25 var result = arrayGen.map(utils.pairArrayToDict);
26
27 return utils.curried2(result, arguments);
28}
29
30function dict(arb) {
31 arb = utils.force(arb);
32 arbitraryAssert(arb);
33
34 var pairArbitrary = pair.pair(string.string, arb);
35 var arrayArbitrary = array.array(pairArbitrary);
36
37 return arrayArbitrary.smap(utils.pairArrayToDict, utils.dictToPairArray, makeMapShow(arb.show));
38}
39
40module.exports = {
41 arbitrary: dict,
42 generator: generateDict,
43};