All Downloads are FREE. Search and download functionalities are using the official Maven repository.

singleton.twoface.impl.TwoFaceShell.scala Maven / Gradle / Ivy

The newest version!
package singleton.twoface.impl
import singleton.twoface.TwoFace

import singleton.ops.impl.{GeneralMacros, HasOut}
import scala.reflect.macros.whitebox

////////////////////////////////////////////////////////////////////////////////
// The code duplication in `Shell` can indeed be reduced.
// However, the duplication was favored because it had caused less 'red' in
// IntelliJ, when the `apply` in the `Shell` traits has a concrete return type.
// Example red code without concrete return type:
// def testme[L <: Int,R <: Int](l : TwoFace.Int[L], r : TwoFace.Int[R])
//     (implicit tfs : TwoFace.Int.Shell2[+,L,Int,R,Int]) = tfs(l,r)
// val tmres = testme(TwoFace.Int(2),testme(TwoFace.Int(2),TwoFace.Int(2)))
////////////////////////////////////////////////////////////////////////////////
object Shell {
//  @scala.annotation.implicitNotFound("Unable to create shell for TwoFace")
//  trait One[FuncApply, FuncArgs, Arg1, Arg1Wide] {
//    type Out
//    type TF[T]
//    def apply(arg1 : => Arg1Wide) : TF[Out]
//  }
//
  object One { //One Parameter Shell
    type F[_]
//    type Lt[FuncApply, FuncArgs, Arg1, Arg1Wide, Ret_Out, Ret_TF[T]] =
//      One[FuncApply, FuncArgs, Arg1, Arg1Wide] {
//        type Out = Ret_Out
//        type TF[T] = Ret_TF[T]
//      }
//    implicit def ev[FuncApply, FuncArgs, Arg1, Arg1Wide, Ret_Out, Ret_TF[T]]:
//    Lt[FuncApply, FuncArgs, Arg1, Arg1Wide, Ret_Out, Ret_TF] =
//    macro Macro.shell[FuncApply, FuncArgs, Arg1, Arg1Wide]
//
//    final class Macro(val c: whitebox.Context) extends GeneralMacros {
//      def shell[FuncApply, FuncArgs, Arg1, Arg1Wide]
//      (implicit funcApply : c.WeakTypeTag[FuncApply], func : c.WeakTypeTag[FuncArgs],
//       arg1 : c.WeakTypeTag[Arg1], arg1Wide : c.WeakTypeTag[Arg1Wide]) : c.Tree = TwoFaceShellMaterializer[
//        One[FuncApply, FuncArgs, Arg1, Arg1Wide]].shell()
//    }
//
    @scala.annotation.implicitNotFound("Unable to create shell for TwoFace")
    trait Char[FuncApply, FuncArgs, Arg1, Arg1Wide] extends HasOut {
      def apply(arg1 : => Arg1Wide) : TwoFace.Char[Out]
    }
    object Char {
      type Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Out0] =
        Char[FuncApply, FuncArgs, Arg1, Arg1Wide]{type Out = Out0}
      implicit def ev[FuncApply, FuncArgs, Arg1, Arg1Wide, Out] :
        Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Out] =
        macro Macro.shell[FuncApply, FuncArgs, Arg1, Arg1Wide]

      final class Macro(val c: whitebox.Context) extends GeneralMacros {
        def shell[FuncApply, FuncArgs, Arg1, Arg1Wide]
        (implicit funcApply : c.WeakTypeTag[FuncApply], func : c.WeakTypeTag[FuncArgs],
         arg1 : c.WeakTypeTag[Arg1], arg1Wide : c.WeakTypeTag[Arg1Wide]) : c.Tree = TwoFaceShellMaterializer[
          Char[FuncApply, FuncArgs, Arg1, Arg1Wide]].shell(c.symbolOf[TwoFaceAny.Char.Shell1[F,_,_]])
      }
    }

    @scala.annotation.implicitNotFound("Unable to create shell for TwoFace")
    trait Int[FuncApply, FuncArgs, Arg1, Arg1Wide] extends HasOut {
      def apply(arg1 : => Arg1Wide) : TwoFace.Int[Out]
    }
    object Int {
      type Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Out0] =
        Int[FuncApply, FuncArgs, Arg1, Arg1Wide]{type Out = Out0}
      implicit def ev[FuncApply, FuncArgs, Arg1, Arg1Wide, Out] :
      Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Out] =
      macro Macro.shell[FuncApply, FuncArgs, Arg1, Arg1Wide]

      final class Macro(val c: whitebox.Context) extends GeneralMacros {
        def shell[FuncApply, FuncArgs, Arg1, Arg1Wide]
        (implicit funcApply : c.WeakTypeTag[FuncApply], func : c.WeakTypeTag[FuncArgs],
         arg1 : c.WeakTypeTag[Arg1], arg1Wide : c.WeakTypeTag[Arg1Wide]) : c.Tree = TwoFaceShellMaterializer[
          Int[FuncApply, FuncArgs, Arg1, Arg1Wide]].shell(c.symbolOf[TwoFaceAny.Int.Shell1[F,_,_]])
      }
    }

    @scala.annotation.implicitNotFound("Unable to create shell for TwoFace")
    trait Long[FuncApply, FuncArgs, Arg1, Arg1Wide] extends HasOut {
      def apply(arg1 : => Arg1Wide) : TwoFace.Long[Out]
    }
    object Long {
      type Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Out0] =
        Long[FuncApply, FuncArgs, Arg1, Arg1Wide]{type Out = Out0}
      implicit def ev[FuncApply, FuncArgs, Arg1, Arg1Wide, Out] :
      Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Out] =
      macro Macro.shell[FuncApply, FuncArgs, Arg1, Arg1Wide]

      final class Macro(val c: whitebox.Context) extends GeneralMacros {
        def shell[FuncApply, FuncArgs, Arg1, Arg1Wide]
        (implicit funcApply : c.WeakTypeTag[FuncApply], func : c.WeakTypeTag[FuncArgs],
         arg1 : c.WeakTypeTag[Arg1], arg1Wide : c.WeakTypeTag[Arg1Wide]) : c.Tree = TwoFaceShellMaterializer[
          Long[FuncApply, FuncArgs, Arg1, Arg1Wide]].shell(c.symbolOf[TwoFaceAny.Long.Shell1[F,_,_]])
      }
    }

    @scala.annotation.implicitNotFound("Unable to create shell for TwoFace")
    trait Float[FuncApply, FuncArgs, Arg1, Arg1Wide] extends HasOut {
      def apply(arg1 : => Arg1Wide) : TwoFace.Float[Out]
    }
    object Float {
      type Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Out0] =
        Float[FuncApply, FuncArgs, Arg1, Arg1Wide]{type Out = Out0}
      implicit def ev[FuncApply, FuncArgs, Arg1, Arg1Wide, Out] :
      Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Out] =
      macro Macro.shell[FuncApply, FuncArgs, Arg1, Arg1Wide]

      final class Macro(val c: whitebox.Context) extends GeneralMacros {
        def shell[FuncApply, FuncArgs, Arg1, Arg1Wide]
        (implicit funcApply : c.WeakTypeTag[FuncApply], func : c.WeakTypeTag[FuncArgs],
         arg1 : c.WeakTypeTag[Arg1], arg1Wide : c.WeakTypeTag[Arg1Wide]) : c.Tree = TwoFaceShellMaterializer[
          Float[FuncApply, FuncArgs, Arg1, Arg1Wide]].shell(c.symbolOf[TwoFaceAny.Float.Shell1[F,_,_]])
      }
    }

    @scala.annotation.implicitNotFound("Unable to create shell for TwoFace")
    trait Double[FuncApply, FuncArgs, Arg1, Arg1Wide] extends HasOut {
      def apply(arg1 : => Arg1Wide) : TwoFace.Double[Out]
    }
    object Double {
      type Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Out0] =
        Double[FuncApply, FuncArgs, Arg1, Arg1Wide]{type Out = Out0}
      implicit def ev[FuncApply, FuncArgs, Arg1, Arg1Wide, Out] :
      Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Out] =
      macro Macro.shell[FuncApply, FuncArgs, Arg1, Arg1Wide]

      final class Macro(val c: whitebox.Context) extends GeneralMacros {
        def shell[FuncApply, FuncArgs, Arg1, Arg1Wide]
        (implicit funcApply : c.WeakTypeTag[FuncApply], func : c.WeakTypeTag[FuncArgs],
         arg1 : c.WeakTypeTag[Arg1], arg1Wide : c.WeakTypeTag[Arg1Wide]) : c.Tree = TwoFaceShellMaterializer[
          Double[FuncApply, FuncArgs, Arg1, Arg1Wide]].shell(c.symbolOf[TwoFaceAny.Double.Shell1[F,_,_]])
      }
    }

    @scala.annotation.implicitNotFound("Unable to create shell for TwoFace")
    trait String[FuncApply, FuncArgs, Arg1, Arg1Wide] extends HasOut {
      def apply(arg1 : => Arg1Wide) : TwoFace.String[Out]
    }
    object String {
      type Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Out0] =
        String[FuncApply, FuncArgs, Arg1, Arg1Wide]{type Out = Out0}
      implicit def ev[FuncApply, FuncArgs, Arg1, Arg1Wide, Out] :
      Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Out] =
      macro Macro.shell[FuncApply, FuncArgs, Arg1, Arg1Wide]

      final class Macro(val c: whitebox.Context) extends GeneralMacros {
        def shell[FuncApply, FuncArgs, Arg1, Arg1Wide]
        (implicit funcApply : c.WeakTypeTag[FuncApply], func : c.WeakTypeTag[FuncArgs],
         arg1 : c.WeakTypeTag[Arg1], arg1Wide : c.WeakTypeTag[Arg1Wide]) : c.Tree = TwoFaceShellMaterializer[
          String[FuncApply, FuncArgs, Arg1, Arg1Wide]].shell(c.symbolOf[TwoFaceAny.String.Shell1[F,_,_]])
      }
    }

    @scala.annotation.implicitNotFound("Unable to create shell for TwoFace")
    trait Boolean[FuncApply, FuncArgs, Arg1, Arg1Wide] extends HasOut {
      def apply(arg1 : => Arg1Wide) : TwoFace.Boolean[Out]
    }
    object Boolean {
      type Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Out0] =
        Boolean[FuncApply, FuncArgs, Arg1, Arg1Wide]{type Out = Out0}
      implicit def ev[FuncApply, FuncArgs, Arg1, Arg1Wide, Out] :
      Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Out] =
      macro Macro.shell[FuncApply, FuncArgs, Arg1, Arg1Wide]

      final class Macro(val c: whitebox.Context) extends GeneralMacros {
        def shell[FuncApply, FuncArgs, Arg1, Arg1Wide]
        (implicit funcApply : c.WeakTypeTag[FuncApply], func : c.WeakTypeTag[FuncArgs],
         arg1 : c.WeakTypeTag[Arg1], arg1Wide : c.WeakTypeTag[Arg1Wide]) : c.Tree = TwoFaceShellMaterializer[
          Boolean[FuncApply, FuncArgs, Arg1, Arg1Wide]].shell(c.symbolOf[TwoFaceAny.Boolean.Shell1[F,_,_]])
      }
    }
  }


//  @scala.annotation.implicitNotFound("Unable to create shell for TwoFace")
//  trait Two[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide] extends HasOut {
//    type Out
//    type TF[T]
//    def apply(arg1 : => Arg1Wide, arg2 : => Arg2Wide) : TF[Out]
//  }
//
  object Two { //Two Parameters Shell
    type F[_,_]
//    type Lt[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Ret_Out, Ret_TF[T]] =
//      Two[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide] extends HasOut {
//        type Out = Ret_Out
//        type TF[T] = Ret_TF[T]
//      }
//    implicit def ev[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Ret_Out, Ret_TF[T]]:
//    Lt[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Ret_Out, Ret_TF] =
//    macro Macro.shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]
//
//    final class Macro(val c: whitebox.Context) extends GeneralMacros {
//      def shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]
//      (implicit funcApply : c.WeakTypeTag[FuncApply], func : c.WeakTypeTag[FuncArgs],
//       arg1 : c.WeakTypeTag[Arg1], arg1Wide : c.WeakTypeTag[Arg1Wide], arg2 : c.WeakTypeTag[Arg2],
//       arg2Wide : c.WeakTypeTag[Arg2Wide]) : c.Tree = TwoFaceShellMaterializer[
//        Two[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]].shell()
//    }

    @scala.annotation.implicitNotFound("Unable to create shell for TwoFace")
    trait Char[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide] extends HasOut {
      def apply(arg1 : => Arg1Wide, arg2 : => Arg2Wide) : TwoFace.Char[Out]
    }
    object Char {
      type Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Out0] =
        Char[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]{type Out = Out0}
      implicit def ev[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Out]:
      Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Out] =
      macro Macro.shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]

      final class Macro(val c: whitebox.Context) extends GeneralMacros {
        def shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]
        (implicit funcApply : c.WeakTypeTag[FuncApply], func : c.WeakTypeTag[FuncArgs],
         arg1 : c.WeakTypeTag[Arg1], arg1Wide : c.WeakTypeTag[Arg1Wide], arg2 : c.WeakTypeTag[Arg2],
         arg2Wide : c.WeakTypeTag[Arg2Wide]) : c.Tree = TwoFaceShellMaterializer[
          Char[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]].shell(c.symbolOf[TwoFaceAny.Char.Shell2[F,_,_,_,_]])
      }
    }

    @scala.annotation.implicitNotFound("Unable to create shell for TwoFace")
    trait Int[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide] extends HasOut {
      def apply(arg1 : => Arg1Wide, arg2 : => Arg2Wide) : TwoFace.Int[Out]
    }
    object Int {
      type Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Out0] =
        Int[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]{type Out = Out0}
      implicit def ev[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Out]:
      Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Out] =
      macro Macro.shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]

      final class Macro(val c: whitebox.Context) extends GeneralMacros {
        def shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]
        (implicit funcApply : c.WeakTypeTag[FuncApply], func : c.WeakTypeTag[FuncArgs],
         arg1 : c.WeakTypeTag[Arg1], arg1Wide : c.WeakTypeTag[Arg1Wide], arg2 : c.WeakTypeTag[Arg2],
         arg2Wide : c.WeakTypeTag[Arg2Wide]) : c.Tree = TwoFaceShellMaterializer[
          Int[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]].shell(c.symbolOf[TwoFaceAny.Int.Shell2[F,_,_,_,_]])
      }
    }

    @scala.annotation.implicitNotFound("Unable to create shell for TwoFace")
    trait Long[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide] extends HasOut {
      def apply(arg1 : => Arg1Wide, arg2 : => Arg2Wide) : TwoFace.Long[Out]
    }
    object Long {
      type Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Out0] =
        Long[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]{type Out = Out0}
      implicit def ev[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Out]:
      Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Out] =
      macro Macro.shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]

      final class Macro(val c: whitebox.Context) extends GeneralMacros {
        def shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]
        (implicit funcApply : c.WeakTypeTag[FuncApply], func : c.WeakTypeTag[FuncArgs],
         arg1 : c.WeakTypeTag[Arg1], arg1Wide : c.WeakTypeTag[Arg1Wide], arg2 : c.WeakTypeTag[Arg2],
         arg2Wide : c.WeakTypeTag[Arg2Wide]) : c.Tree = TwoFaceShellMaterializer[
          Long[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]].shell(c.symbolOf[TwoFaceAny.Long.Shell2[F,_,_,_,_]])
      }
    }

    @scala.annotation.implicitNotFound("Unable to create shell for TwoFace")
    trait Float[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide] extends HasOut {
      def apply(arg1 : => Arg1Wide, arg2 : => Arg2Wide) : TwoFace.Float[Out]
    }
    object Float {
      type Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Out0] =
        Float[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]{type Out = Out0}
      implicit def ev[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Out]:
      Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Out] =
      macro Macro.shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]

      final class Macro(val c: whitebox.Context) extends GeneralMacros {
        def shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]
        (implicit funcApply : c.WeakTypeTag[FuncApply], func : c.WeakTypeTag[FuncArgs],
         arg1 : c.WeakTypeTag[Arg1], arg1Wide : c.WeakTypeTag[Arg1Wide], arg2 : c.WeakTypeTag[Arg2],
         arg2Wide : c.WeakTypeTag[Arg2Wide]) : c.Tree = TwoFaceShellMaterializer[
          Float[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]].shell(c.symbolOf[TwoFaceAny.Float.Shell2[F,_,_,_,_]])
      }
    }

    @scala.annotation.implicitNotFound("Unable to create shell for TwoFace")
    trait Double[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide] extends HasOut {
      def apply(arg1 : => Arg1Wide, arg2 : => Arg2Wide) : TwoFace.Double[Out]
    }
    object Double {
      type Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Out0] =
        Double[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]{type Out = Out0}
      implicit def ev[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Out]:
      Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Out] =
      macro Macro.shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]

      final class Macro(val c: whitebox.Context) extends GeneralMacros {
        def shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]
        (implicit funcApply : c.WeakTypeTag[FuncApply], func : c.WeakTypeTag[FuncArgs],
         arg1 : c.WeakTypeTag[Arg1], arg1Wide : c.WeakTypeTag[Arg1Wide], arg2 : c.WeakTypeTag[Arg2],
         arg2Wide : c.WeakTypeTag[Arg2Wide]) : c.Tree = TwoFaceShellMaterializer[
          Double[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]].shell(c.symbolOf[TwoFaceAny.String.Shell2[F,_,_,_,_]])
      }
    }

    @scala.annotation.implicitNotFound("Unable to create shell for TwoFace")
    trait String[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide] extends HasOut {
      def apply(arg1 : => Arg1Wide, arg2 : => Arg2Wide) : TwoFace.String[Out]
    }
    object String {
      type Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Out0] =
        String[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]{type Out = Out0}
      implicit def ev[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Out]:
      Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Out] =
      macro Macro.shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]

      final class Macro(val c: whitebox.Context) extends GeneralMacros {
        def shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]
        (implicit funcApply : c.WeakTypeTag[FuncApply], func : c.WeakTypeTag[FuncArgs],
         arg1 : c.WeakTypeTag[Arg1], arg1Wide : c.WeakTypeTag[Arg1Wide], arg2 : c.WeakTypeTag[Arg2],
         arg2Wide : c.WeakTypeTag[Arg2Wide]) : c.Tree = TwoFaceShellMaterializer[
          String[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]].shell(c.symbolOf[TwoFaceAny.Boolean.Shell2[F,_,_,_,_]])
      }
    }

    @scala.annotation.implicitNotFound("Unable to create shell for TwoFace")
    trait Boolean[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide] extends HasOut {
      def apply(arg1 : => Arg1Wide, arg2 : => Arg2Wide) : TwoFace.Boolean[Out]
    }
    object Boolean {
      type Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Out0] =
        Boolean[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]{type Out = Out0}
      implicit def ev[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Out]:
      Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Out] =
      macro Macro.shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]

      final class Macro(val c: whitebox.Context) extends GeneralMacros {
        def shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]
        (implicit funcApply : c.WeakTypeTag[FuncApply], func : c.WeakTypeTag[FuncArgs],
         arg1 : c.WeakTypeTag[Arg1], arg1Wide : c.WeakTypeTag[Arg1Wide], arg2 : c.WeakTypeTag[Arg2],
         arg2Wide : c.WeakTypeTag[Arg2Wide]) : c.Tree = TwoFaceShellMaterializer[
          Boolean[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide]].shell(c.symbolOf[TwoFaceAny.Boolean.Shell2[F,_,_,_,_]])
      }
    }
  }



//  @scala.annotation.implicitNotFound("Unable to create shell for TwoFace")
//  trait Three[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide] {
//    type Out
//    type TF[T]
//    def apply(arg1 : => Arg1Wide, arg2 : => Arg2Wide, arg3 : => Arg3Wide) : TF[Out]
//  }

  object Three { //Two Parameters Shell
    type F[_,_,_]
//    type Lt[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide, Ret_Out, Ret_TF[T]] =
//      Three[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide] {
//        type Out = Ret_Out
//        type TF[T] = Ret_TF[T]
//      }
//    implicit def ev[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide, Ret_Out, Ret_TF[T]]:
//    Lt[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide, Ret_Out, Ret_TF] =
//    macro Macro.shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]
//
//    final class Macro(val c: whitebox.Context) extends GeneralMacros {
//      def shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]
//      (implicit funcApply : c.WeakTypeTag[FuncApply], func : c.WeakTypeTag[FuncArgs],
//       arg1 : c.WeakTypeTag[Arg1], arg1Wide : c.WeakTypeTag[Arg1Wide], arg2 : c.WeakTypeTag[Arg2],
//       arg2Wide : c.WeakTypeTag[Arg2Wide], arg3 : c.WeakTypeTag[Arg3],
//       arg3Wide : c.WeakTypeTag[Arg3Wide]) : c.Tree = TwoFaceShellMaterializer[
//        Three[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]].shell()
//    }

    @scala.annotation.implicitNotFound("Unable to create shell for TwoFace")
    trait Char[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide] extends HasOut {
      def apply(arg1 : => Arg1Wide, arg2 : => Arg2Wide, arg3 : => Arg3Wide) : TwoFace.Char[Out]
    }
    object Char {
      type Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide, Out0] =
        Char[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]{type Out = Out0}
      implicit def ev[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide, Out]:
      Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide, Out] =
      macro Macro.shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]

      final class Macro(val c: whitebox.Context) extends GeneralMacros {
        def shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]
        (implicit funcApply : c.WeakTypeTag[FuncApply], func : c.WeakTypeTag[FuncArgs],
         arg1 : c.WeakTypeTag[Arg1], arg1Wide : c.WeakTypeTag[Arg1Wide], arg2 : c.WeakTypeTag[Arg2],
         arg2Wide : c.WeakTypeTag[Arg2Wide], arg3 : c.WeakTypeTag[Arg3],
         arg3Wide : c.WeakTypeTag[Arg3Wide]) : c.Tree = TwoFaceShellMaterializer[
          Char[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]].shell(c.symbolOf[TwoFaceAny.Char.Shell3[F,_,_,_,_,_,_]])
      }
    }

    @scala.annotation.implicitNotFound("Unable to create shell for TwoFace")
    trait Int[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide] extends HasOut {
      def apply(arg1 : => Arg1Wide, arg2 : => Arg2Wide, arg3 : => Arg3Wide) : TwoFace.Int[Out]
    }
    object Int {
      type Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide, Out0] =
        Int[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]{type Out = Out0}
      implicit def ev[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide, Out]:
      Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide, Out] =
      macro Macro.shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]

      final class Macro(val c: whitebox.Context) extends GeneralMacros {
        def shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]
        (implicit funcApply : c.WeakTypeTag[FuncApply], func : c.WeakTypeTag[FuncArgs],
         arg1 : c.WeakTypeTag[Arg1], arg1Wide : c.WeakTypeTag[Arg1Wide], arg2 : c.WeakTypeTag[Arg2],
         arg2Wide : c.WeakTypeTag[Arg2Wide], arg3 : c.WeakTypeTag[Arg3],
         arg3Wide : c.WeakTypeTag[Arg3Wide]) : c.Tree = TwoFaceShellMaterializer[
          Int[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]].shell(c.symbolOf[TwoFaceAny.Int.Shell3[F,_,_,_,_,_,_]])
      }
    }

    @scala.annotation.implicitNotFound("Unable to create shell for TwoFace")
    trait Long[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide] extends HasOut {
      def apply(arg1 : => Arg1Wide, arg2 : => Arg2Wide, arg3 : => Arg3Wide) : TwoFace.Long[Out]
    }
    object Long {
      type Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide, Out0] =
        Long[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]{type Out = Out0}
      implicit def ev[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide, Out]:
      Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide, Out] =
      macro Macro.shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]

      final class Macro(val c: whitebox.Context) extends GeneralMacros {
        def shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]
        (implicit funcApply : c.WeakTypeTag[FuncApply], func : c.WeakTypeTag[FuncArgs],
         arg1 : c.WeakTypeTag[Arg1], arg1Wide : c.WeakTypeTag[Arg1Wide], arg2 : c.WeakTypeTag[Arg2],
         arg2Wide : c.WeakTypeTag[Arg2Wide], arg3 : c.WeakTypeTag[Arg3],
         arg3Wide : c.WeakTypeTag[Arg3Wide]) : c.Tree = TwoFaceShellMaterializer[
          Long[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]].shell(c.symbolOf[TwoFaceAny.Long.Shell3[F,_,_,_,_,_,_]])
      }
    }

    @scala.annotation.implicitNotFound("Unable to create shell for TwoFace")
    trait Float[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide] extends HasOut {
      def apply(arg1 : => Arg1Wide, arg2 : => Arg2Wide, arg3 : => Arg3Wide) : TwoFace.Float[Out]
    }
    object Float {
      type Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide, Out0] =
        Float[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]{type Out = Out0}
      implicit def ev[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide, Out]:
      Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide, Out] =
      macro Macro.shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]

      final class Macro(val c: whitebox.Context) extends GeneralMacros {
        def shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]
        (implicit funcApply : c.WeakTypeTag[FuncApply], func : c.WeakTypeTag[FuncArgs],
         arg1 : c.WeakTypeTag[Arg1], arg1Wide : c.WeakTypeTag[Arg1Wide], arg2 : c.WeakTypeTag[Arg2],
         arg2Wide : c.WeakTypeTag[Arg2Wide], arg3 : c.WeakTypeTag[Arg3],
         arg3Wide : c.WeakTypeTag[Arg3Wide]) : c.Tree = TwoFaceShellMaterializer[
          Float[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]].shell(c.symbolOf[TwoFaceAny.Float.Shell3[F,_,_,_,_,_,_]])
      }
    }

    @scala.annotation.implicitNotFound("Unable to create shell for TwoFace")
    trait Double[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide] extends HasOut {
      def apply(arg1 : => Arg1Wide, arg2 : => Arg2Wide, arg3 : => Arg3Wide) : TwoFace.Double[Out]
    }
    object Double {
      type Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide, Out0] =
        Double[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]{type Out = Out0}
      implicit def ev[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide, Out]:
      Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide, Out] =
      macro Macro.shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]

      final class Macro(val c: whitebox.Context) extends GeneralMacros {
        def shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]
        (implicit funcApply : c.WeakTypeTag[FuncApply], func : c.WeakTypeTag[FuncArgs],
         arg1 : c.WeakTypeTag[Arg1], arg1Wide : c.WeakTypeTag[Arg1Wide], arg2 : c.WeakTypeTag[Arg2],
         arg2Wide : c.WeakTypeTag[Arg2Wide], arg3 : c.WeakTypeTag[Arg3],
         arg3Wide : c.WeakTypeTag[Arg3Wide]) : c.Tree = TwoFaceShellMaterializer[
          Double[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]].shell(c.symbolOf[TwoFaceAny.Double.Shell3[F,_,_,_,_,_,_]])
      }
    }

    @scala.annotation.implicitNotFound("Unable to create shell for TwoFace")
    trait String[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide] extends HasOut {
      def apply(arg1 : => Arg1Wide, arg2 : => Arg2Wide, arg3 : => Arg3Wide) : TwoFace.String[Out]
    }
    object String {
      type Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide, Out0] =
        String[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]{type Out = Out0}
      implicit def ev[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide, Out]:
      Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide, Out] =
      macro Macro.shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]

      final class Macro(val c: whitebox.Context) extends GeneralMacros {
        def shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]
        (implicit funcApply : c.WeakTypeTag[FuncApply], func : c.WeakTypeTag[FuncArgs],
         arg1 : c.WeakTypeTag[Arg1], arg1Wide : c.WeakTypeTag[Arg1Wide], arg2 : c.WeakTypeTag[Arg2],
         arg2Wide : c.WeakTypeTag[Arg2Wide], arg3 : c.WeakTypeTag[Arg3],
         arg3Wide : c.WeakTypeTag[Arg3Wide]) : c.Tree = TwoFaceShellMaterializer[
          String[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]].shell(c.symbolOf[TwoFaceAny.String.Shell3[F,_,_,_,_,_,_]])
      }
    }

    @scala.annotation.implicitNotFound("Unable to create shell for TwoFace")
    trait Boolean[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide] extends HasOut {
      def apply(arg1 : => Arg1Wide, arg2 : => Arg2Wide, arg3 : => Arg3Wide) : TwoFace.Boolean[Out]
    }
    object Boolean {
      type Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide, Out0] =
        Boolean[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]{type Out = Out0}
      implicit def ev[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide, Out]:
      Aux[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide, Out] =
      macro Macro.shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]

      final class Macro(val c: whitebox.Context) extends GeneralMacros {
        def shell[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]
        (implicit funcApply : c.WeakTypeTag[FuncApply], func : c.WeakTypeTag[FuncArgs],
         arg1 : c.WeakTypeTag[Arg1], arg1Wide : c.WeakTypeTag[Arg1Wide], arg2 : c.WeakTypeTag[Arg2],
         arg2Wide : c.WeakTypeTag[Arg2Wide], arg3 : c.WeakTypeTag[Arg3],
         arg3Wide : c.WeakTypeTag[Arg3Wide]) : c.Tree = TwoFaceShellMaterializer[
          Boolean[FuncApply, FuncArgs, Arg1, Arg1Wide, Arg2, Arg2Wide, Arg3, Arg3Wide]].shell(c.symbolOf[TwoFaceAny.Boolean.Shell3[F,_,_,_,_,_,_]])
      }
    }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy