anchor.diff:  % TODO: Need type spec for Python/Ruby subscribers (ErlPort Pid and
   % function path)
   -type payload() :: term().
  -% TODO: How to represent external functions?
  --type sender() :: [pid()].
   -type topic() :: atom().
   % TODO: How to represent external functions?
   -type destination() :: [pid()].
   -type subscriber() :: pid().
   -type hub() :: erlport:server_instance().
   -type send_options() :: [route_by_path].
  +-type message() :: #message{}.
   
   -define(IS_TOPIC(T), is_atom(T)).
   
  
positive.code:     start_link/1,
      stop/1,
      send/3,
      send/5,
      subscribe/3,
      unsubscribe/3,
      subscribe_all/2,
  
negative.code: notify(_Subscriber, _Message, false) ->
      ok.
  
  send(Hub, Payload, Topic, Sender=[_|_], Options) when ?IS_TOPIC(Topic)
          andalso is_list(Options) ->
      gen_server:cast(Hub, {send, Payload, Topic, Sender, Options});
  send(Hub, Payload, Destination=[_|_], Sender=[_|_], Options)
          when is_list(Options) ->
      case Options of
          [] ->
              Dest = lists:last(Destination),
              do_send(Dest, [Hub | Sender], [Dest], Payload);
          [route_by_path] ->
              case Destination of
                  [Next] ->
                      do_send(Next, [Hub | Sender], [Next], Payload);
                  [Next | Tail] ->
                      do_send(Next, [Hub | Sender], Tail, Payload)
              end
      end.
  
  do_send(Next, Sender, Destination, Payload) ->
      case is_routing_loop(Next, Sender) of
          false ->
  