Struct frunk::hlist::HNil[][src]

pub struct HNil;
Expand description

Represents the right-most end of a heterogeneous list

Examples

let h = h_cons(1, HNil);
let h = h.head;
assert_eq!(h, 1);
Run

Implementations

Returns the length of a given HList

Examples

let h = hlist![1, "hi"];
assert_eq!(h.len(), 2);
Run

Returns whether a given HList is empty

Examples

let h = hlist![];
assert!(h.is_empty());
Run

Prepend an item to the current HList

Examples

let h1 = hlist![1, "hi"];
let h2 = h1.prepend(true);
let (a, (b, c)) = h2.into_tuple2();
assert_eq!(a, true);
assert_eq!(b, 1);
assert_eq!(c, "hi");
Run

Consume the current HList and return an HList with the requested shape.

sculpt allows us to extract/reshape/scult the current HList into another shape, provided that the requested shape’s types are are contained within the current HList.

The Indices type parameter allows the compiler to figure out that Ts and Self can be morphed into each other.

Examples

let h = hlist![9000, "joe", 41f32, true];
let (reshaped, remainder): (HList![f32, i32, &str], _) = h.sculpt();
assert_eq!(reshaped, hlist![41f32, 9000, "joe"]);
assert_eq!(remainder, hlist![true]);
Run

Reverse the HList.

Examples

assert_eq!(hlist![].into_reverse(), hlist![]);

assert_eq!(
    hlist![1, "hello", true, 42f32].into_reverse(),
    hlist![42f32, true, "hello", 1],
)
Run

Return an HList where the contents are references to the original HList on which this method was called.

Examples

assert_eq!(hlist![].to_ref(), hlist![]);

assert_eq!(hlist![1, true].to_ref(), hlist![&1, &true]);
Run

Return an HList where the contents are mutable references to the original HList on which this method was called.

Examples

assert_eq!(hlist![].to_mut(), hlist![]);

assert_eq!(hlist![1, true].to_mut(), hlist![&mut 1, &mut true]);
Run

Apply a function to each element of an HList.

This transforms some HList![A, B, C, ..., E] into some HList![T, U, V, ..., Z]. A variety of types are supported for the folder argument:

  • An hlist![] of closures (one for each element).
  • A single closure (for mapping an HList that is homogenous).
  • A single Poly.

Examples

use ::frunk::HNil;

assert_eq!(HNil.map(HNil), HNil);

let h = hlist![1, false, 42f32];

// Sadly we need to help the compiler understand the bool type in our mapper

let mapped = h.to_ref().map(hlist![
    |&n| n + 1,
    |b: &bool| !b,
    |&f| f + 1f32]);
assert_eq!(mapped, hlist![2, true, 43f32]);

// There is also a value-consuming version that passes values to your functions
// instead of just references:

let mapped2 = h.map(hlist![
    |n| n + 3,
    |b: bool| !b,
    |f| f + 8959f32]);
assert_eq!(mapped2, hlist![4, true, 9001f32]);
Run

Zip two HLists together.

This zips a HList![A1, B1, ..., C1] with a HList![A2, B2, ..., C2] to make a HList![(A1, A2), (B1, B2), ..., (C1, C2)]

Example

use ::frunk::HNil;

assert_eq!(HNil.zip(HNil), HNil);

let h1 = hlist![1, false, 42f32];
let h2 = hlist![true, "foo", 2];

let zipped = h1.zip(h2);
assert_eq!(zipped, hlist![
    (1, true),
    (false, "foo"),
    (42f32, 2),
]);
Run

Perform a left fold over an HList.

This transforms some HList![A, B, C, ..., E] into a single value by visiting all of the elements in left-to-right order. A variety of types are supported for the mapper argument:

  • An hlist![] of closures (one for each element).
  • A single closure (for folding an HList that is homogenous).
  • A single Poly.

The accumulator can freely change type over the course of the call. When called with a list of N functions, an expanded form of the implementation with type annotations might look something like this:

let acc: Acc0 = init_value;
let acc: Acc1 = f1(acc, x1);
let acc: Acc2 = f2(acc, x2);
let acc: Acc3 = f3(acc, x3);
...
let acc: AccN = fN(acc, xN);
acc
Run

Examples

let nil = hlist![];

assert_eq!(nil.foldl(hlist![], 0), 0);

let h = hlist![1, false, 42f32];

let folded = h.to_ref().foldl(
    hlist![
        |acc, &i| i + acc,
        |acc, b: &bool| if !b && acc > 42 { 9000f32 } else { 0f32 },
        |acc, &f| f + acc
    ],
    1
);

assert_eq!(42f32, folded);

// There is also a value-consuming version that passes values to your folding
// functions instead of just references:

let folded2 = h.foldl(
    hlist![
        |acc, i| i + acc,
        |acc, b: bool| if !b && acc > 42 { 9000f32 } else { 0f32 },
        |acc, f| f + acc
    ],
    8918
);

assert_eq!(9042f32, folded2)
Run

Perform a right fold over an HList.

This transforms some HList![A, B, C, ..., E] into a single value by visiting all of the elements in reverse order. A variety of types are supported for the mapper argument:

  • An hlist![] of closures (one for each element).
  • A single closure (for folding an HList that is homogenous), taken by reference.
  • A single Poly.

The accumulator can freely change type over the course of the call.

Comparison to foldl

While the order of element traversal in foldl may seem more natural, foldr does have its use cases, in particular when it is used to build something that reflects the structure of the original HList (such as folding an HList of Options into an Option of an HList). An implementation of such a function using foldl will tend to reverse the list, while foldr will tend to preserve its order.

The reason for this is because foldr performs what is known as “structural induction;” it can be understood as follows:

  • Write out the HList in terms of h_cons and HNil.
  • Substitute each h_cons with a function, and substitute HNil with init
the list:
    h_cons(x1, h_cons(x2, h_cons(x3, ...h_cons(xN, HNil)...)))

becomes:
       f1( x1,    f2( x2,    f3( x3, ...   fN( xN, init)...)))

Examples

let nil = hlist![];

assert_eq!(nil.foldr(hlist![], 0), 0);

let h = hlist![1, false, 42f32];

let folded = h.foldr(
    hlist![
        |acc, i| i + acc,
        |acc, b: bool| if !b && acc > 42f32 { 9000 } else { 0 },
        |acc, f| f + acc
    ],
    1f32
);

assert_eq!(9001, folded)
Run

Trait Implementations

The resulting type after applying the + operator.

Performs the + operation. Read more

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Convert a coproduct into another that can hold its variants. Read more

Convert a coproduct into another that can hold its variants. Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Formats the value using the given formatter. Read more

Returns the “default value” for a type. Read more

Performs the conversion.

Perform a left fold over an HList. Read more

Perform a right fold over an HList. Read more

Returns the length of a given HList type without making use of any references, or in fact, any values at all. Read more

👎 Deprecated since 0.1.31:

Please use LEN instead

Returns the length of a given HList type without making use of any references, or in fact, any values at all. Read more

Returns the length of a given HList Read more

Returns whether a given HList is empty Read more

Prepends an item to the current HList Read more

Apply a function to each element of an HList. Read more

Zip this HList with another one. Read more

Feeds this value into the given Hasher. Read more

Feeds a slice of this type into the given Hasher. Read more

Performs the conversion.

Reverses a given data structure.

Implementation for HNil

Turns the current HList into an unlabelled one. Read more

Turns the current HList into a value-labelled one. Read more

This method returns an Ordering between self and other. Read more

Compares and returns the maximum of two values. Read more

Compares and returns the minimum of two values. Read more

Restrict a value to a certain interval. Read more

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This method returns an ordering between self and other values if one exists. Read more

This method tests less than (for self and other) and is used by the < operator. Read more

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

This method tests greater than (for self and other) and is used by the > operator. Read more

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

Implementation for when the target is an empty HList (HNil)

Index type is HNil because we don’t need an index for finding HNil

Consumes the current HList and returns an HList with the requested shape. Read more

Since () + () = (), the same is true for HNil

Associative operation taking which combines two values. Read more

Implementation of Transmogrifier for when the Target is empty and the Source is non-empty.

Consume this current object and return an object of the Target type. Read more

Implementation of Transmogrifier for when the Target is empty and the Source is empty.

Consume this current object and return an object of the Target type. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Performs the conversion.

Performs the conversion.

Performs the indexed conversion.

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

Consumes the current HList and returns an HList with the requested shape. Read more

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.