Fixtype of printer states.
This is a product type introduced by fty::defprod.
Our printing functions take and return printer states.
The main content of a printer state is the bytes that form (the data of) the file being printed, in reverse order, which makes extending the data more efficent (by consing).
We also keep track of the current indentation level, as a natural number starting from 0 (where 0 means left margin). This is used to print indented code, as typical.
We also keep track of the printing options (see priopt). These do not change in the course of the printing, but they are convenient to keep in the printing state, to avoid passing them around as an extra parameter. They are set when the printing state is initially created, and they never change.
In the future, we may make printer states richer, in order to support more elaborate printing strategies, e.g. involving a specified maximum number of columns, for which the printing state would need to keep track of the current number of columns and other information.
We could look into turning the printer state into a stobj in the future, if efficiency is an issue.