# sanctuary-show

> Evaluable string representations

Latest version **3.0.0** (published 2022-01-19) · MIT license · 0 weekly downloads

## Install

```sh
npm install sanctuary-show
pnpm add sanctuary-show
yarn add sanctuary-show
bun add sanctuary-show
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 3.0.0 |
| Published | 2022-01-19 |
| First published | 2018-04-29 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 8.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 14 |
| Maintainers | davidchambers, avaq |

## Links

- npm: https://www.npmjs.com/package/sanctuary-show
- Repository: https://github.com/sanctuary-js/sanctuary-show
- Homepage: https://github.com/sanctuary-js/sanctuary-show#readme
- Issues: https://github.com/sanctuary-js/sanctuary-show/issues
- npm.io page: https://npm.io/package/sanctuary-show

## Recent versions

- 3.0.0 (latest) — 2022-01-19
- 2.0.0 — 2020-01-17
- 1.0.0 — 2018-04-29

## README

# sanctuary-show

Haskell has a `show` function which can be applied to a compatible value to
produce a descriptive string representation of that value. The idea is that
the string representation should, if possible, be an expression which would
produce the original value if evaluated.

This library provides a similar [`show`](#show) function.

In general, this property should hold: `eval (show (x)) = x`. In some cases
parens are necessary to ensure correct interpretation (`{}`, for example,
is an empty block rather than an empty object in some contexts). Thus the
property is more accurately stated `eval ('(' + show (x) + ')') = x`.

One can make values of a custom type compatible with [`show`](#show) by
defining a `@@show` method. For example:

```javascript
//# Maybe#@@show :: Maybe a ~> () -> String
//.
//. ```javascript
//. > show (Nothing)
//. 'Nothing'
//.
//. > show (Just (['foo', 'bar', 'baz']))
//. 'Just (["foo", "bar", "baz"])'
//. ```
Maybe.prototype['@@show'] = function() {
  return this.isNothing ? 'Nothing' : 'Just (' + show (this.value) + ')';
};
```

### <a name="show" href="https://github.com/sanctuary-js/sanctuary-show/blob/v3.0.0/index.js#L62">`show :: Showable a => a -⁠> String`</a>

Returns a useful string representation of the given value.

Dispatches to the value's `@@show` method if present.

Where practical, `show (eval ('(' + show (x) + ')')) = show (x)`.

```javascript
> show (null)
'null'

> show (undefined)
'undefined'

> show (true)
'true'

> show (new Boolean (false))
'new Boolean (false)'

> show (-0)
'-0'

> show (NaN)
'NaN'

> show (new Number (Infinity))
'new Number (Infinity)'

> show ('foo\n"bar"\nbaz\n')
'"foo\\n\\"bar\\"\\nbaz\\n"'

> show (new String (''))
'new String ("")'

> show (['foo', 'bar', 'baz'])
'["foo", "bar", "baz"]'

> show ([[[[[0]]]]])
'[[[[[0]]]]]'

> show ({x: [1, 2], y: [3, 4], z: [5, 6]})
'{"x": [1, 2], "y": [3, 4], "z": [5, 6]}'
```

---
_Source: https://npm.io/package/sanctuary-show · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
