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) }