(seq
  (seq
    (call "init_peer_id" ("" "init") [] data) ; ok = [{data}]
    (fold data p
      (seq
        (fold data x
          (seq
            (fold data y
              (seq
                (call p ("serv" "args") [p x y] $stream) ; behaviour = echo
                (next y)))
            (next x)))
        (next p))))
  (seq
     (call "other_peer_id" ("" "collect") []) ; behaviour = unit
     (call "init_peer_id" ("" "complete") [])))
;;; TODO what if we change order?  It will change the data locality
