kinds 0.2.0

Higher-Kinded Types simulated by GATs
Documentation
  • Coverage
  • 3.57%
    1 out of 28 items documented0 out of 13 items with examples
  • Size
  • Source code size: 6.87 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 3.33 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Links
  • ireina7/kinds
    1 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • ireina7

kinds

Higher-Kinded Types in Rust by GAT

Example

use kinds::kind::*;

enum Nat<'a, K: Kind<'a> + 'a> {
    Zero,
    Next(K::F<Nat<'a, K>>),
}

type BoxedNats = Box<Nat<'static, kinds::std::boxed::Box>>;

fn sum_boxed_nats(n: &BoxedNats) -> (usize, usize) {
    let n = n.as_ref();
    match n {
        Nat::Zero => (0, 0),
        Nat::Next(n) => {
            let (sum, n) = sum_boxed_nats(n);
            (sum + n + 1, n + 1)
        }
    }
}

#[test]
fn test_sum_nats() {
    let n: BoxedNats = Box::new(Nat::Next(Box::new(Nat::Next(Box::new(Nat::Next(
        Box::new(Nat::Zero),
    ))))));
    let sum = sum_boxed_nats(&n).0;
    assert_eq!(sum, 6);
}