channel CIO1(myId:Str) { out accounts(ac:List, signup(name:Str)) == cons(tuple(name, nil, nil), t1) } channel CIO2(id:Str) { out accounts.{id}.tweets(t1:List, tweet(text:Str, time:Long)) == cons(tuple(time, text), t1) } channel C(myId:Str; m:Json) { in accounts.{myId}.tweets(t1:List, m) == m.myTweets sub C2(no:Int; flw:Json := m.followees.{no}) { in accounts.{myId}.followees.{no}(id:Str, flw) == flw.id in accounts.{flw.id}.tweets(t2:List, flw) == flw.tweets } out accounts.{myId}.timeline(l:List, m) == merge(m.myTweets, m.followees) }