channel SignUp {
out accounts(acDB:Map, signup(id:Str, name:Str)) = insert(acDB, id, {"name": name, "tweets": nil, "followees": nil, "timeline": nil})
}
channel Tweet(id:Str) {
out accounts.{id}.tweets(twList:List, tweet(text:Str, time:Long)) = append(twList, {"time": time, "text": text})
}
channel AddFollowee(id:Str) {
out accounts.{id}.followees(fwList:List, addFollowee(flwId:Str)) = append(fwList, flwId)
}
channel UpdateTimeline(myId:Str) {
in accounts.{myId}.tweets(t1:List, m) = m.myTweets
for EachFollowee(no:Int) {
in accounts.{myId}.followees.{no}(id:Str, m) = m.flw.{no}.id
in accounts.{m.flw.{no}.id}.tweets(t2:List, m) = m.flw.{no}.tweets
}
out accounts.{myId}.timeline(l:List, m) = merge(m.myTweets, m.flw)
}