35 releases
0.4.3 | Aug 31, 2024 |
---|---|
0.4.2 | Jun 17, 2023 |
0.4.1 | Nov 3, 2022 |
0.4.0 | Jun 25, 2021 |
0.0.11 | Mar 22, 2017 |
#2264 in Rust patterns
282,025 downloads per month
Used in 308 crates
(40 directly)
195KB
3K
SLoC
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:
Dependencies
~160KB