com.twitter.algebird
This makes it easy to construct from a function when T has an ordering, which is common Note, your function must respect the ordering