As for the monoid instance:
def pairMonoid[A,B](a:Monoid[A],b:Monoid[B]) = new Monoid[(A, B)] { def empty = (a.empty, b.empty) ... }