Crate frunk_core

Source
Expand description

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![|acc, i| i + acc,
    |acc, _| if acc > 42f32 { 9000 } else { 0 },
    |acc, f| 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![|acc, i| i + acc,
                   |acc, _| if acc > 42f32 { 9000 } else { 0 },
                   |acc, f| f + acc],
            1f32
    );
assert_eq!(folded, 9001);

// Mapping over an HList
let h3 = hlist![9000, "joe", 41f32];
let mapped = h3.to_ref().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]);

Links:

  1. Source on Github
  2. Crates.io page

Modules§

coproduct
Module that holds Coproduct data structures, traits, and implementations
generic
This module holds the machinery behind Generic.
hlist
Module that holds HList data structures, implementations, and typeclasses.
indices
Types used for indexing into HLists and coproducts.
labelled
This module holds the machinery behind LabelledGeneric.
path
Holds models, traits, and logic for generic traversal of models
traits
Traits that provide generic functionality for multiple types in frunk

Macros§

Coprod
Returns a type signature for a Coproduct of the provided types
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.
poly_fn
Returns a polymorphic function for use with mapping/folding heterogeneous types.