package monocle.generic

import monocle.Iso
import monocle.function.Reverse
import shapeless.ops.tuple.{Reverse => TReverse}


object tuplen extends TupleNInstances

trait TupleNInstances {

  implicit def tupleReverse[S, A](implicit evRev1: TReverse.Aux[S, A],
                                           evRev2: TReverse.Aux[A, S]): Reverse[S, A] = new Reverse[S, A]{
    def reverse = Iso[S, A](evRev1.apply)(evRev2.apply)
  }

}