case class Person(name: String, age: Int)

object Person {
  type T = (String, Int)
  object PersonTuple extends (Person <=> T) {
    def from = Function.tupled(Person.apply)
    def to = Person.unapply _ >>> (_.get)
  }
  implicit object PersonMonoid extends IsomorphismMonoid[Person, T] {
    def G = Monoid[T]
    def iso = PersonTuple
  }
}