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