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