Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

support sanctuary-show #57

Open
davidchambers opened this issue May 28, 2018 · 6 comments
Open

support sanctuary-show #57

davidchambers opened this issue May 28, 2018 · 6 comments

Comments

@davidchambers
Copy link

> 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.

@paldepind
Copy link
Member

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

(*) Which I have not forgotten about 😅

@davidchambers
Copy link
Author

davidchambers commented May 31, 2018

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.

@paldepind
Copy link
Member

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?

@davidchambers
Copy link
Author

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!

@paldepind
Copy link
Member

@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?

@davidchambers
Copy link
Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants