Add non-escaping show functions

Kai Ma <[email protected]> Sun, 19 Dec 2021 17:53:47 +0800
Newsgroups gmane.comp.lang.haskell.libraries
Message-ID <[email protected]>
Hi all!

A few months ago I proposed to change the escaping behavior of `show`. The general consensus is that it will introduce hard-to-find and unpredictable amount of breakage.

However, I still think there should be a standard (i.e. living in base) solution to that problem. Instead of changing existing instances, we can add new functions. Therefore, I propose:

1. Add `showNE` [1] to `Show`, with a default implementation `showNE = show`.
2. Add `printNE x = putStrLn (showNE x)`.
3. Change ghci’s default print function to `printNE`.
4. Document that `show` escapes strings so its output will support ASCII terminals, where `showNE` is limited to only terminals that support Unicode.

This proposal benefits ghci without breaking any existing code, and the older behavior can be restored by `:set -interactive-print print`.

Q&A:

- Why not just use existing packages, like pretty-simple, for this purpose?

  I believe ghci should support this behavior (non-escaping) out of box without installing any third-party packages.

- Why not just add `printNE` which undoes escaping?

  Definitely doable. However, it feels more like a hack than a solution.

According to the new CLC process, this proposal should be submitted to https://github.com/haskell/core-libraries-committee/issues. But I’d like to hear some early feedback, and I will implement this proposal.

[1] “NE” stands for non-escaping. This is only a temporary name in order to avoid bike-shedding.

Regards,
Kai
_______________________________________________
Libraries mailing list
[email protected]
http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries