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 size of each identation level, as a positive integer that indicates the number of spaces for a single indentation level. This does not change in the course of the printing, but it is convenient to keep it in the printing state, to avoid passing it around as an extra parameter. It is set when the printing state is initially created and never changes.
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.