anchor.diff:  let split (str: string) (c: char) =
       List.ofArray (str.Split([|c|]))
   
  -// Messages
  -// Join: join address
  -// Routes a message somewhere
  -let route (node: Node) (msg: string) (key: GUID) =
  -    // I'll just write this one... god knows where it should all go
  -    //if
  -    0
  -
  -// Send messages to the other pastry nodes that this has been created
  -let finalize_initialisation (node: Node) =
  -    0
  -
  -// Sends a join message to find the key closest to the GUID of the new node,
  -// appending the state tables of all nodes on the way before returning it
  -let send_join_message (new_node: GUID, address: Address, data: string) =
  -    0
  -
  -let listen_until_initialized (node: Node) =
  -    0
  -
  -// Convert a byte array to an u64. Please don't use an array that is more than
  -// 8 bytes long... (tip: You get undefined behavior)
  -let to_u64 (byte_arr: byte[]) = // It's this or mapi + foldback ...
  -    let rec inner arr pos acc =
  -        match arr with
  -        | [] -> acc
  -        | x::xs -> // Use bit shifts to add the correct value
  -            inner xs (pos - 1) (acc + ((uint64 x) <<< (8 * pos)))
  -    let res: uint64 = 0UL
  -    inner (Array.toList byte_arr) (byte_arr.Length - 1) res
  -
  -// Converts an IP-address (or any other string) to an u128 (sorta)
  -let hash (ip_address: NetworkLocation): U128 =
  -    let content: byte[] = System.Text.Encoding.ASCII.GetBytes(ip_address)
  -    let bytes: byte[] = (content |> HashAlgorithm.Create("SHA1").ComputeHash).[..15] // 16 first bytes
  -    let a = to_u64 bytes.[..7]
  -    let b = to_u64 bytes.[8..15]
  -    (a, b)
  -
  -let listen node =
  -    // Listen for a a message
  -    use listener = new System.Net.HttpListener ()
  -    listener.Prefixes.Add "http://localhost:8080/"
  -    listener.Start ()
  -    let cxt      = listener.GetContext()
  -    let request  = cxt.Request
  -    let response = cxt.Response
  -    let meth     = request.HttpMethod
  -    let args     = request.QueryString
  -    let path     = request.Url.AbsolutePath
  -    let rip      = request.RemoteEndPoint.Address
  -    let rport    = request.RemoteEndPoint.Port
  -    let body =
  -        use is = new System.IO.StreamReader(request.InputStream, request.ContentEncoding)
  -        is.ReadToEnd()
  -    printfn "Path: %s" path
  -
  -    // Now interpret what was received
  -
  -
  +// Sends a pastry message somewhere
   let send_message (address: NetworkLocation) (destination: U128) (typ: MessageType) (data: string) =
       try
           let cmd =
  
positive.code:     }
      match peer with
      | None ->
          node
      | Some(peer) ->
          match send_message peer guid Join address with
          | None -> failwith (sprintf "Could not establish a connection with peer at '%s'" peer)
          | Some(_) ->
              node
  
  let send (node: Node) (msg: string) (address: Address) =
      0
  
  let forward (node: Node) (msg: string) (dst: GUID) =
      0
  
  // Adapted from https://stackoverflow.com/questions/1069103/how-to-get-my-own-ip-address-in-c
  let get_public_ip () =
  
negative.code:     //listen()
      //join_network "localhost:8080" None
      //join_network "localhost:80" (Some("localhost:8080"))
      printfn "Danish Pastry!"
      match args with
      | [|addr; port; peer|] ->
          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...
      | _ ->
          printfn "Usage: Pastry.exe <address> <port> <peer_address_with_port>"
      0