34 个版本
0.4.2 | 2023年6月17日 |
---|---|
0.4.1 | 2022年11月3日 |
0.4.0 | 2021年6月25日 |
0.3.1 | 2019年12月21日 |
0.0.11 | 2017年3月22日 |
1812 在 Rust 模式
158,053 每月下载量
用于 299 个 crate (40 个直接使用)
195KB
3K SLoC
Frunk Core
这个库是 Frunk 的核心。它应该尽可能简单,只包含泛型编程的基本构建块。
示例
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]);
链接
依赖项
~170KB