write_canonical(S, Term) is equivalent to printf(S, "%MOQ.vDw", Term).
Note that as usual, the output is buffered, so it may need to be flushed either by closing the stream, by writing again or by using flush/1.
Success: [eclipse 1]: write_canonical(output, 'A'+[a,B]). +('A', .(a, .(_g216, []))) B = B yes. Error: write_canonical(S, a(b,c)). (Error 4). write_canonical("string", a(b,c)). (Error 5). write_canonical(input, X + 2). (Error 192). write_canonical(atom, X + 2). (Error 193).