Newer
Older
AlgebraicDataflowArchitectureModel / AlgebraicDataflowArchitectureModel / models / Twitter.model
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) 
}