canrun 0.1.0

A logic programming library inspired by the *Kanren family of language DSLs.
Documentation
// use canrun::{both, pair, var, Can, Equals, Goal, State};
// extern crate env_logger;
// #[test]
// fn does_not_overflow() {
//     let _ = env_logger::init();
//     let x = var();
//     let infinite_xs: Goal<usize> = x.equals(pair(x.can(), Can::Nil));
//     // An overflow is not triggered if infinite_xs is the second argument
//     let bad_goal = both(infinite_xs, x.equals(Can::Val(1)));
//     let results = bad_goal.run(State::new()).nth(0);
//     // The goal should be invalidated early and not return a state
//     assert!(results.is_none());
// }