anchor.diff:          , write/3
           ]).
   
  +-export([delete/3]).
  +
   -type type() :: #?TYPE{data :: pid()}.
   
   -spec ?CONSTRUCTOR() -> type().
  
positive.code: -behaviour('erlang.io.IWriter').
  
  -export([?CONSTRUCTOR/0, ?CONSTRUCTOR/1]).
  -export([ start_link/1
          , init/1
          , loop/1
          ]).
  
  
negative.code: loop(Str) ->
    receive
      {io_request, From, ReplyAs, Request} ->
        {Reply, NewStr} = request(Request, Str),
        reply(From, ReplyAs, Reply),
        ?MODULE:loop(NewStr);
      {From, Ref, str} ->
        From ! {Ref, Str},
        ?MODULE:loop(Str);
      {From, Ref, count} ->
        From ! {Ref, 'clojerl.String':count(Str)},
        ?MODULE:loop(Str);
      {From, Ref, {delete, Start, End}} ->
        First  = 'clojerl.String':substring(Str, 0, Start),
        Second = 'clojerl.String':substring(Str, End),
        NewStr = <<First/binary, Second/binary>>,
        From ! {Ref, ok},
        ?MODULE:loop(NewStr);
      {From, Ref, close} ->
        From ! {Ref, ok};
      _Unknown ->
  