You could wrap your redefinitions in a module M without exporting show explicitly. `using M` and accessing the your variation as `M.show` may give the localization you want. Should it not, then doing that within some outer working context, a fencing module, may add enough flexibility.
On Monday, October 10, 2016 at 4:18:52 PM UTC-4, lapeyre....@gmail.com wrote: > > For the record, a workable solution, at least for this particular code: I > pass all output through wrapout() at the outermost output call. The object > to be printed is traversed recursively. All types fall through except for > the handful that I want to change. Each of these is each wrapped in a new > type. I extend Base.show for each of these wrapper types. This seems pretty > economical and robust and works across versions. The wrapper types are > only introduced upon output, the rest of the code never sees them. > > This works because the code uses a customization of the REPL, and several > instances of print, warn, string, etc. I make a new top-level output > function for the REPL that uses `wrapout`. I also generate wrappers for > each of print, etc. that map `wrapout` over all arguments. A developer is > expected to use the interface provided rather than `print` etc. directly. > The user doesn't even have a choice. There are very few types in the > package, but a lot of nested instances. So there is very little code needed > to traverse these instances. This might be more difficult in a different > situation if many methods for wrapout() were required. > > On Monday, October 10, 2016 at 12:20:50 AM UTC+2, lapeyre....@gmail.com > wrote: >> >> I want to change show for Symbol, Rational, and Bool. Till now, I simply >> overwrote the existing methods. This works great. I get what I want, even >> in warn and error and string interpolation, etc. It works flawlessly on >> v0.4, v0.5, and v0.6. But, this changes the behavior for everyone. So, I >> want to get the same effect through different means that do not affect >> other code. Any idea about how to do this ? >> >> One solution is to copy a large amount of base code that uses print, >> write, show, etc. renaming these functions. Other than changing 15 or 20 >> lines for Symbol, etc., the code is unchanged. This is works more or less, >> but is obviously a fragile, bad solution. >> >> Another idea is to make a subtype of IO that wraps subtypes of IO. I am >> allowed to write methods for show for this new type. This is turning out to >> be complicated and unworkable. >> >> Another vague idea is to make a new mime type. Another is to copy >> IOStream as another type, so that I only have to write methods for Symbol, >> Rational and Bool again. >> >> >> >