Yes, this is what the product implicits are for, and yes it is still a pain. When we switch to 2.10 only, this can be done with a macro, and we will add that.
you should do:
scala> import com.twitter.algebird.Semigroup
import com.twitter.algebird.Semigroup
scala> case class Test(x: Int, y: String)
defined class Test
scala> Semigroup.apply(Test.apply _, Test.unapply _)
res1: com.twitter.algebird.Semigroup[Test] = com.twitter.algebird.Product2Semigroup@730476e8
scala> res1.plus(Test(1, "hello"), Test(2, "world"))
res2: Test = Test(3,helloworld)
The apply, unapply line is unfortunate, but oh well.
What I want is a default implicit macro that can build these for any case class. Pull req?