File: t5156.scala

package info (click to toggle)
scala 2.11.12-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 62,924 kB
  • sloc: javascript: 28,808; java: 13,415; xml: 3,135; sh: 1,620; python: 756; makefile: 38; awk: 36; ansic: 6
file content (21 lines) | stat: -rw-r--r-- 601 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
sealed trait HList
final case class HCons[H, T <: HList](head : H, tail : T) extends HList
case object HNil extends HList

object HList {
  type ::[H, T <: HList] = HCons[H, T]
  type HNil = HNil.type

  implicit def hlistOps[L <: HList](l : L) = new {
    def ::[H](h : H) : H :: L = HCons(h, l)
    def last(implicit last : Last[L]) {}
  }

  class Last[L <: HList]
  implicit def hsingleLast[H] = new Last[H :: HNil]
  implicit def hlistLast[H, T <: HList](implicit lt : Last[T]) = new Last[H :: T]

  type III = Int :: Int :: Int :: HNil
  val iii : III = 0 :: 0 :: 0 :: HNil
  val l = iii.last
}