list icon indicating copy to clipboard operation
list copied to clipboard

support sanctuary-show

Open davidchambers opened this issue 7 years ago • 6 comments

> var {list} = require ('list')
> var show = require ('sanctuary-show')

Current behaviour:

> show (list ('foo', 'bar', 'baz'))
'{"bits": 3, "length": 3, "offset": 0, "prefix": [0], "root": undefined, "suffix": ["foo", "bar", "baz"]}'

Suggested behaviour:

> show (list ('foo', 'bar', 'baz'))
'list ("foo", "bar", "baz")'

This would require defining a @@show method which applies show to each of the list's elements.

davidchambers avatar May 28 '18 14:05 davidchambers

Since this is specific for Sanctuary, what do you think about including it in sanctuary-list(*)?

(*) Which I have not forgotten about 😅

paldepind avatar May 29 '18 11:05 paldepind

I like to imagine a future in which the Fantasy Land community at large adopts @@show. There's nothing Sanctuary-specific about the specification.

Edit: Updated link to point to correct project.

davidchambers avatar May 31 '18 15:05 davidchambers

I don't see anything about @@show in the link? What is the difference between toString and @@show? If List implemented a toString method could it's @@show method simply be List.prototype["@@show"] = List.prototype.toString?

paldepind avatar Jun 01 '18 13:06 paldepind

I don't see anything about @@show in the link?

Oops! I linked to the wrong project. I meant to link to sanctuary-show.

If List implemented a toString method could it's @@show method simply be List.prototype["@@show"] = List.prototype.toString?

If List#toString uses show to generate the string representations of its elements, then absolutely!

davidchambers avatar Jun 01 '18 13:06 davidchambers

@davidchambers

If I understand correctly @@show should be implemented as:

List.prototype["@@show"] = function(l) {
  return "list(" + L.join(", ", L.map(show, l)) + ")";
}

However, that depends on the show function from sanctuary-show. I hope List will become a foundational library and therefore I'd like to avoid adding dependencies to it.

I understand that converting values to strings is used extensively in Sanctuary to do error reporting. But outside of that, I don't see many use cases for converting a list into an evaluateable string. Debugging and REPLs could be potential use cases but JavaScript has debuggers and REPLs that don't rely on converting values to strings.

Taking that into consideration, wouldn't it be more reasonable to add @@show in sanctuary-list?

paldepind avatar Jun 07 '18 16:06 paldepind

I hope List will become a foundational library and therefore I'd like to avoid adding dependencies to it.

I hope that show will become foundational and that all ADTs will support it. ;)

Taking that into consideration, wouldn't it be more reasonable to add @@show in sanctuary-list?

It's certainly reasonable. It seems that Sanctuary is opinionated to the point that we need a sanctuary- package for everything (except Future a b).

davidchambers avatar Jun 07 '18 17:06 davidchambers