TailSwitch

org.parboiled2.support.TailSwitch
See theTailSwitch companion trait
object TailSwitch

Attributes

Companion
trait
Graph
Supertypes
class Object
trait Matchable
class Any
Self type
TailSwitch.type

Members list

Type members

Types

type Aux[L <: HList, LI <: HList, T <: HList, TI <: HList, R <: HList, RI <: HList, Out0 <: HList] = TailSwitch[L, T, R] { type Out = Out0; }
type Prepend0[A <: HList, B <: HList] = A match { case HNil => B case h :: t => h :: Prepend0[t, B] }
type Reverse0[Acc <: HList, L <: HList] = L match { case HNil => Acc case h :: t => Reverse0[h :: Acc, t] }
type Reverse1[L <: HList] = L match { case HNil => HNil case h :: t => Reverse0[h :: HNil, t] }
type TailSwitch0[L <: HList, LI <: HList, T <: HList, TI <: HList, R <: HList, RI <: HList] = TI match { case L => R case Any => LI match { case T => Prepend0[Reverse1[RI], R] case HNil => TI match { case _$1 :: t => TailSwitch0[L, HNil, T, t, R, RI] } case h :: t => TI match { case HNil => TailSwitch0[L, t, T, HNil, R, h :: RI] case _$2 :: tt => TailSwitch0[L, t, T, tt, R, h :: RI] } } }

Implicits

Implicits

implicit def tailSwitch[L <: HList, T <: HList, R <: HList]: TailSwitch[L, T, R] { type Out = TailSwitch0[L, L, T, T, R, HNil]; }