JSPM

sanctuary-show

3.0.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 92193
  • Score
    100M100P100Q155724F
  • License MIT

Evaluable string representations

Package Exports

  • sanctuary-show
  • sanctuary-show/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (sanctuary-show) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

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 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 by defining a @@show method. For example:

//# 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).

> 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]}'