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