Choreographies are a way of describing communicating systems as global programs
        let x@A = crunch()
        let y@B = crunch()
        A[x] -> B.x
        B[y] -> A.y
      
        let x@A = crunch()
        let y@B = crunch()
        A[x] -> B.x
        B[y] -> A.y
      A
        x = crunch()
        
        let x@A = crunch()
        let y@B = crunch()
        A[x] -> B.x
        B[y] -> A.y
      A
        x = crunch()
        B
        y = crunch()
        
        let x@A = crunch()
        let y@B = crunch()
        A[x] -> B.x
        B[y] -> A.y
      A
        x = crunch()
        send("A",x)
        B
        y = crunch()
        x = receive("A")
        
        let x@A = crunch()
        let y@B = crunch()
        A[x] -> B.x
        B[y] -> A.y
      A
        x = crunch()
        send("B",x)
        y = receive("B")
        B
        y = crunch()
        x = receive("A")
        send("A",y)
        Features
        A[x] -> B.x
        B[y] -> A.y
      
        A[x] -> B.x
        B[y] -> A.y
      
        A[x] -> B.x
        B[y] -> A.y
       
    