
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