diff options
author | Martin Odersky <odersky@gmail.com> | 2017-03-01 08:48:45 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2017-03-01 08:48:45 +0100 |
commit | e01ca04c28e242a5f602dffc28a1b1eae358ecaf (patch) | |
tree | de326f9b93b57db3da026c16fc619afa442683c4 /tests/run | |
parent | f7a50713a3d9fb7a1a4d70e53b037dd7b8bc2d2b (diff) | |
download | dotty-e01ca04c28e242a5f602dffc28a1b1eae358ecaf.tar.gz dotty-e01ca04c28e242a5f602dffc28a1b1eae358ecaf.tar.bz2 dotty-e01ca04c28e242a5f602dffc28a1b1eae358ecaf.zip |
Drop duplication in test
Diffstat (limited to 'tests/run')
-rw-r--r-- | tests/run/HLists-nonvariant.scala | 71 |
1 files changed, 0 insertions, 71 deletions
diff --git a/tests/run/HLists-nonvariant.scala b/tests/run/HLists-nonvariant.scala index b912f50ac..a3a639bcd 100644 --- a/tests/run/HLists-nonvariant.scala +++ b/tests/run/HLists-nonvariant.scala @@ -76,74 +76,3 @@ object Test { println(at(zs1, Succ(Succ(Zero)))) } } - -object TestNonVariant { - - type HNil = HNil.type - type Zero = Zero.type - - trait Concat[Xs <: HList, Ys <: HList, Zs <: HList] { - def concat(xs: Xs, ys: Ys): Zs - } - - implicit def concatNil[Xs <: HList]: Concat[HNil, Xs, Xs] = - new Concat[HNil, Xs, Xs] { - def concat(fst: HNil, snd: Xs) = snd - } - - implicit def concatCons[X, Xs <: HList, Ys <: HList, Zs <: HList]( - implicit ev: Concat[Xs, Ys, Zs] - ): Concat[HCons[X, Xs], Ys, HCons[X, Zs]] = - new Concat[HCons[X, Xs], Ys, HCons[X, Zs]] { - def concat(xs: HCons[X, Xs], ys: Ys): HCons[X, Zs] = - HCons(xs.hd, ev.concat(xs.tl, ys)) - } - - def concat[Xs <: HList, Ys <: HList, Zs <: HList](xs: Xs, ys: Ys)(implicit ev: Concat[Xs, Ys, Zs]): Zs = - ev.concat(xs, ys) - - val xs = HCons(1, HCons("A", HNil)) - val ys = HCons(true, HNil) - val zs = concat(xs, ys) - val zs1: HCons[Int, HCons[String, HCons[Boolean, HNil]]] = zs - - trait At[Xs <: HList, N <: Num] { - type Out - def at(xs: Xs, n: N): Out - } - - implicit def atZero[XZ, Xs <: HList]: At[HCons[XZ, Xs], Zero] { type Out = XZ } = - new At[HCons[XZ, Xs], Zero] { - type Out = XZ - def at(xs: HCons[XZ, Xs], n: Zero) = xs.hd - } - - implicit def atSucc[XX, Xs <: HList, N <: Num]( - implicit ev: At[Xs, N] - ): At[HCons[XX, Xs], Succ[N]] { type Out = ev.Out } = new At[HCons[XX, Xs], Succ[N]] { - type Out = ev.Out - def at(xs: HCons[XX, Xs], n: Succ[N]): Out = ev.at(xs.tl, n.pred) - } - - def at[Xs <: HList, N <: Num](xs: Xs, n: N)( - implicit ev: At[Xs, N] - ): ev.Out = ev.at(xs, n) - - def main(args: Array[String]) = { - val ys1 = HCons(1, HNil) - println(at(ys1, Zero)) - - val ys2 = HCons(1, HCons("A", HNil)) - val y2 = at(ys2, Succ(Zero)) - println(at(ys2, Succ(Zero))) - val ys3 = HCons(1, HCons("A", HCons(true, HNil))) - println(at(ys3, Succ(Succ(Zero)))) - val ys4 = HCons(1, HCons("A", HCons(true, HCons(1.0, HNil)))) - println(at(ys4, Succ(Succ(Zero)))) - - println(zs1) - println(at(zs1, Zero)) - println(at(zs1, Succ(Zero))) - println(at(zs1, Succ(Succ(Zero)))) - } -} |