package chisel3 object MetaConnect { implicit class Connection[A](that: A) { def makeConnection[B, C](me: B)(implicit f: A => B => C): C = { f(that)(me) } } implicit def abstractInterfaceConnection[A, B, C](implicit f: A => B => C): AbstractInterface[A] => AbstractInterface[B] => AbstractInterface[C] = (a: AbstractInterface[A]) => (b: AbstractInterface[B]) => new AbstractInterface(f(a.params)(b.params)) }