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.
- Alphabetic
- By Inheritance
- HLists
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Type Members
-
final
case class
:+:[+H, +T <: HList](head: H, tail: T) extends HList with Product with Serializable
The
HListcons cell, which represents one part of anHListin linked list style.The
HListcons cell, which represents one part of anHListin linked list style.Carries the information about the type of this element, plus the
HListtype of the rest of the list.You can use
:+:to make thisHListlonger: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
-
sealed
trait
HList extends AnyRef
The base trait for
HLists.The base trait for
HLists. Functions that takeHLists will need a type parameter subtype ofHList:def myHListFunction[T <: HList](list: HList) = { println(s"This HList has ${list.length} items!") }
-
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. -
final
class
HNil extends HList
The last element of an
HList.The last element of an
HList. This is the starting point for anHList, 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
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
val
HNil: HNil
The HNil singleton.
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()