anchor.diff:  // When you UPDATE this:
   // Also update 'send_messsage' and 'start_listening.listen'
   type MessageType =
  -| Join      // A new node is joining and requesting states
  -| Update    // A new node has been added sucessfully: update to include it
  -| JoinState // The state data for a new node
  -| Route     // Send a message somewhere
  +| Join                  // A new node is joining and requesting states
  +| Update                // A new node has been added sucessfully: update to include it
  +| JoinState             // The state data for a new node
  +| Resource of string    // Request a resource somewhere
       // Add more persistency commands here
   
   // The state record of a Pastry node
  
positive.code:         let address = sprintf "%s:%s" (if addr = "" then get_public_ip() else addr) port
          printfn "? Joining pastry network at '%s'..." address
          let known_peer = if peer = "" then None else Some(peer)
          let node = join_network address known_peer
          ()
          // Start listening...
      | _ ->
  
negative.code:     }
      match peer with
      | None ->
          start_listening<'a> node handler state
      | Some(peer) ->
          match send_message peer Join address guid with
          | None ->
              error <| sprintf "Could not establish a connection with peer at '%s'" peer
          | Some(_) ->
              start_listening<'a> node handler state
  
  // Adapted from https://stackoverflow.com/questions/1069103/how-to-get-my-own-ip-address-in-c
  let get_public_ip () =
  