exec agent S(order_chan,man_chan,pay_chan) =
        C(order_chan) | R(order_chan,man_chan,pay_chan)
        | M(man_chan) | P(pay_chan)

agent C(o) =
        (^item,item_addr,inv_addr)'o<item,item_addr,inv_addr>.
        (item_addr(man_item).0 | inv_addr(invoice).0)

agent R(o, m, p) =
        o(it,it_a,in_a).t.'m<it,it_a>.(^pay_info)'p<pay_info,in_a>.
        R(o, m, p)

agent M(m) = m(i,c_a).(t.(^product)'c_a<product>.0 | M(m))

agent P(p) = p(info,c_a).(t.(^invoice)'c_a<invoice>.0|P(p))