[][src]Crate frunk_core

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.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]);Run

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.