object HLists

Basic support for heterogeneous lists, aka HLists.

An HList can be constructed like so:

import net.liftweb.common.HLists._

trait Base
case class Type1(value: String) extends Base
case class Type2(otherValue: String) extends Base

val myHList = Type1("Value") :+: Type2("Other Value") :+: HNil
myHList match {
  case firstThing :+: secondThing :+: HNil =>
    println(firstThing.value)
    println(secondThing.otherValue)
}

Above, we see that the HList preserved the value of the types of its members, otherwise we wouldn't have been able to fetch value and otherValue, respectively.

Trying the same thing with a list won't work:

val myList = Type1("Value") :: Type2("Other Value") :: Nil
myList match {
  case firstThing :: secondThing :: Nil =>
    // error: value value is not a member of Product with Serializable with Base
    println(firstThing.value)
}

This is because value is not defined in Base. The inferred type of the List has to be a common ancestor class or trait of Type1 and Type2, and no such type has a value method.

Linear Supertypes
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. HLists
  2. AnyRef
  3. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Type Members

  1. final case class :+: [+H, +T <: HList](head: H, tail: T) extends HList with Product with Serializable

    The HList cons cell, which represents one part of an HList in linked list style.

    The HList cons cell, which represents one part of an HList in linked list style.

    Carries the information about the type of this element, plus the HList type of the rest of the list.

    You can use :+: to make this HList longer:

    scala> val first = Type1("Value") :+: HNil
    first: net.liftweb.common.HLists.HCons[Type1,net.liftweb.common.HLists.HNil] = Type1(Value) :+: HNil
    scala> Type2("Other Value") :+: first
    res0: net.liftweb.common.HLists.HCons[Type2,
            net.liftweb.common.HLists.HCons[Type1,
              net.liftweb.common.HLists.HNil]] =
          Type2(Other Value) :+: Type1(Value) :+: HNil
  2. sealed trait HList extends AnyRef

    The base trait for HLists.

    The base trait for HLists. Functions that take HLists will need a type parameter subtype of HList:

    def myHListFunction[T <: HList](list: HList) = {
      println(s"This HList has ${list.length} items!")
    }
  3. implicit final class HListMethods [ListSoFar <: HList] extends AnyRef

    Provides the methods that can be used on an HList.

    Provides the methods that can be used on an HList. These are set apart here due to certain issues we can experience otherwise with the type variance on the :+: class.

  4. final class HNil extends HList

    The last element of an HList.

    The last element of an HList. This is the starting point for an HList, and you can use :+: to start one based on it:

    scala> Type1("Value") :+: HNil
    res0: net.liftweb.common.HLists.HCons[Type1,net.liftweb.common.HLists.HNil] = Type1(Value) :+: HNil

Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. val HNil: HNil

    The HNil singleton.

  5. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  6. def clone(): AnyRef
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  7. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  8. def equals(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  9. def finalize(): Unit
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  10. final def getClass(): Class[_]
    Definition Classes
    AnyRef → Any
  11. def hashCode(): Int
    Definition Classes
    AnyRef → Any
  12. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  13. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  14. final def notify(): Unit
    Definition Classes
    AnyRef
  15. final def notifyAll(): Unit
    Definition Classes
    AnyRef
  16. final def synchronized[T0](arg0: ⇒ T0): T0
    Definition Classes
    AnyRef
  17. def toString(): String
    Definition Classes
    AnyRef → Any
  18. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  19. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  20. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Inherited from AnyRef

Inherited from Any

Ungrouped