Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/sanctuary-js/sanctuary-show
equals (x) (eval (show (x)))
https://github.com/sanctuary-js/sanctuary-show
sanctuary
Last synced: about 2 months ago
JSON representation
equals (x) (eval (show (x)))
- Host: GitHub
- URL: https://github.com/sanctuary-js/sanctuary-show
- Owner: sanctuary-js
- License: mit
- Created: 2018-04-11T10:14:18.000Z (over 6 years ago)
- Default Branch: main
- Last Pushed: 2024-01-25T16:14:23.000Z (11 months ago)
- Last Synced: 2024-04-28T18:04:36.993Z (8 months ago)
- Topics: sanctuary
- Language: JavaScript
- Size: 58.6 KB
- Stars: 14
- Watchers: 10
- Forks: 5
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Contributing: .github/CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
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) + ')';
};
```### `show :: Showable a => a -> String`
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]}'
```