     {:disconnect, {:error, reason}, s}
   end
 
+  def handle_info({:DOWN, _ref, :process, _pid, _reason}, _s) do
+    # TODO handle recipients going down
+  end
+
   ## Helper functions
 
   defp new_data(s, <<>>) do

  end

  defp unsubscribe(s, op, channels, recipient) do
    {channels_to_unsubscribe_from, recipients} =
      Enum.flat_map_reduce(channels, s.recipients, &unsubscribe_from_channel(&1, &2, recipient, op))


  end

  defp subscribe(s, op, channels, recipient) do
    # TODO handle monitoring of `recipient`

    {channels_to_subscribe_to, recipients} =
      Enum.flat_map_reduce(channels, s.recipients, &subscribe_to_channel(&1, &2, recipient, op))

