If the stream is a terminal, the tyo/2 output goes directly to the stream, whereas the output from put/2 is buffered first, and is only output to the stream when the output is flushed (e.g. explicitly using flush/1).
If the stream is not a terminal, tyo/2 behaves like put/2.
Character codes for the non-printable characters (i.e. control characters) are also acceptable.
   Success:
      ?- set_stream(screen,output),
         tyo(screen,91),tyo(screen,97),
         tyo(screen,93).
      [a]
      yes.
      ?- put(screen, 0'a), tyo(screen, 0'b),
         put(screen, 0'c), tyo(screen, 0'd).
      bdac
      yes.
      ?- write(screen,i), tyo(screen, 0'h).
      hi
      yes.
Error:
      tyo(Stream,A).                (Error 4).
      tyo(output,a).                (Error 5).
      tyo(98.0,output).             (Error 5).
      tyo("string", A).             (Error 5).
      tyo(11,97).                   (Error 192).
      tyo(atom,97).                 (Error 193).