Crate frunk_core [] [src]

Frunk Core

This library forms the core of Frunk. It should ideally be minimalistic, containing only the fundamental building blocks of generic programming.

Examples


let h = hlist![1, false, 42f32];
let folded = h.foldr(hlist![|i, acc| i + acc,
    |_, acc| if acc > 42f32 { 9000 } else { 0 },
    |f, acc| f + acc],
    1f32);
assert_eq!(folded, 9001);

// Reverse
let h1 = hlist![true, "hi"];
assert_eq!(h1.into_reverse(), hlist!["hi", true]);

// foldr (foldl also available)
let h2 = hlist![1, false, 42f32];
let folded = h2.foldr(
            hlist![|i, acc| i + acc,
                   |_, acc| if acc > 42f32 { 9000 } else { 0 },
                   |f, acc| f + acc],
            1f32
    );
assert_eq!(folded, 9001);

// Mapping over an HList
let h3 = hlist![9000, "joe", 41f32];
let mapped = (&h3).map(hlist![|&n| n + 1,
                              |&s| s,
                              |&f| f + 1f32]);
assert_eq!(mapped, hlist![9001, "joe", 42f32]);

// Plucking a value out by type
let h4 = hlist![1, "hello", true, 42f32];
let (t, remainder): (bool, _) = h4.pluck();
assert!(t);
assert_eq!(remainder, hlist![1, "hello", 42f32]);

// Resculpting an HList
let h5 = hlist![9000, "joe", 41f32, true];
let (reshaped, remainder2): (Hlist![f32, i32, &str], _) = h5.sculpt();
assert_eq!(reshaped, hlist![41f32, 9000, "joe"]);
assert_eq!(remainder2, hlist![true]);Run

Links: 1. Source on Github 2. Crates.io page

Modules

generic

This module holds the machinery behind Generic.

hlist

Module that holds HList data structures, implementations, and typeclasses.

labelled

This module holds the machinery behind LabelledGeneric.

Macros

Hlist

Returns a type signature for an HList of the provided types

field

Used for creating a Field

hlist

Returns an HList based on the values passed in.

hlist_pat

Macro for pattern-matching on HLists.