The interactive.print_env predicate wraps all globals and ctors in varname(gvname()) and passes them to executor.show_var_dont_eval. Constructor names should never be in varname(gvname()); code doesn't normally expect this to work.
It does work for interpret.show_var_dont_eval (since the interpret similarly places ctor names in varname(gvname()), but that isn't a major problem because it's self-contained within that module), but it won't necessarily work for other backends.
Add a separate executor function executor.show_ctor which shows ctors without evaluating thunks (if the backend uses thunks for constructors).
The interactive. print_env predicate wraps all globals and ctors in varname(gvname()) and passes them to executor. show_var_ dont_eval. Constructor names should never be in varname(gvname()); code doesn't normally expect this to work.
It does work for interpret. show_var_ dont_eval (since the interpret similarly places ctor names in varname(gvname()), but that isn't a major problem because it's self-contained within that module), but it won't necessarily work for other backends.
Add a separate executor function executor.show_ctor which shows ctors without evaluating thunks (if the backend uses thunks for constructors).