#labelled-generic #frunk #generics #generic #coproduct #hlist #h-list

无 std frunk_core

Frunk core 为开发者提供 HList, Coproduct, LabelledGeneric 和 Generic

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日

1812Rust 模式

Download history 48491/week @ 2024-05-04 43359/week @ 2024-05-11 41964/week @ 2024-05-18 41115/week @ 2024-05-25 45158/week @ 2024-06-01 39786/week @ 2024-06-08 42059/week @ 2024-06-15 38925/week @ 2024-06-22 38469/week @ 2024-06-29 41357/week @ 2024-07-06 40231/week @ 2024-07-13 39000/week @ 2024-07-20 40486/week @ 2024-07-27 39765/week @ 2024-08-03 38717/week @ 2024-08-10 32136/week @ 2024-08-17

158,053 每月下载量
用于 299 个 crate (40 个直接使用)

MIT 许可证

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

链接

  1. GitHub 上的源代码
  2. Crates.io 页面

依赖项

~170KB