Skip to content
Functional heterogeneous list (hlist) library for Rust
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


Build Status MIT licensed

This Rust library provides support for heterogeneous lists (known as HLists). An HList is a functional, tuple-like, strongly-typed data structure that can contain elements of differing types.

There are three layers in this library:

  • A basic HList data structure consisting of HCons and HNil types.
  • An hlist! macro for constructing an HList from a series of elements.
  • An HListSupport plugin/attribute that, when declared for a struct, allows for easy conversion of struct instances to/from an HList representation.

See the next section for more details on usage of these layers.


Add a dependency to your Cargo.toml:

pl-hlist = "1.0"

Then, in your crate:

use pl_hlist::*;

An HList can be constructed manually as follows:

let x: HCons<u8, HCons<u32, HNil>> = HCons(1u8, HCons(666u32, HNil));

The hlist! macro provides a convenient shorthand for constructing an HList:

let x: HCons<u8, HCons<u32, HNil>> = hlist!(1u8, 666u32);

The custom HListSupport derive attribute can be applied to a struct declaration to automatically implement support for converting that struct to/from an HList representation:

struct TestStruct {
    foo: u8,
    bar: u32

let hlist0 = hlist!(1u8, 666u32);
let s = TestStruct::from_hlist(hlist0);
assert_eq!(, 1u8);
assert_eq!(, 666u32);
let hlist1 = s.into_hlist();
assert_eq!(hlist0, hlist1);


pl-hlist is distributed under an MIT license. See LICENSE for more details.

You can’t perform that action at this time.