sbt/util/collection/HList.scala

28 lines
587 B
Scala
Raw Normal View History

/* sbt -- Simple Build Tool
* Copyright 2010 Mark Harrah
*/
package sbt
import Types._
sealed trait HList
{
type ToM[M[_]] <: MList[M]
type Up <: MList[Id]
def up: Up
}
sealed trait HNil extends HList
{
type ToM[M[_]] = MNil
type Up = MNil
def up = MNil
def :+: [G](g: G): G :+: HNil = HCons(g, this)
}
object HNil extends HNil
final case class HCons[H, T <: HList](head : H, tail : T) extends HList
{
type ToM[M[_]] = MCons[H, tail.ToM[M], M]
type Up = MCons[H, tail.Up, Id]
def up = MCons[H,tail.Up, Id](head, tail.up)
def :+: [G](g: G): G :+: H :+: T = HCons(g, this)
}