UNPKG

1.58 kBJavaScriptView Raw
1/* @flow weak */
2"use strict";
3
4/**
5 ### Show functions
6*/
7
8var utils = require("./utils.js");
9
10/**
11 - `show.def(x : a): string`
12
13 Currently implemented as `JSON.stringify`.
14*/
15function showDef(obj) {
16 return JSON.stringify(obj);
17}
18
19/**
20 - `show.pair(showA: a -> string, showB: b -> string, x: (a, b)): string`
21*/
22function showPair(showA, showB) {
23 var result = function (p) {
24 return "(" + showA(p[0]) + ", " + showB(p[1]) + ")";
25 };
26
27 return utils.curried3(result, arguments);
28}
29
30/**
31 - `show.either(showA: a -> string, showB: b -> string, e: either a b): string`
32*/
33function showEither(showA, showB) {
34 function showLeft(value) {
35 return "Left(" + showA(value) + ")";
36 }
37
38 function showRight(value) {
39 return "Right(" + showB(value) + ")";
40 }
41
42 var result = function (e) {
43 return e.either(showLeft, showRight);
44 };
45
46 return utils.curried3(result, arguments);
47}
48
49/**
50 - `show.tuple(shrinks: (a -> string, b -> string...), x: (a, b...)): string`
51*/
52function showTuple(shows) {
53 var result = function (objs) {
54 var strs = [];
55 for (var i = 0; i < shows.length; i++) {
56 strs.push(shows[i](objs[i]));
57 }
58 return strs.join("; ");
59 };
60
61 return utils.curried2(result, arguments);
62}
63
64/**
65 - `show.array(shrink: a -> string, x: array a): string`
66*/
67function showArray(show) {
68 var result = function (arr) {
69 return "[" + arr.map(show).join(", ") + "]";
70 };
71
72 return utils.curried2(result, arguments);
73}
74
75module.exports = {
76 def: showDef,
77 pair: showPair,
78 either: showEither,
79 tuple: showTuple,
80 array: showArray,
81};