mod ast; mod checker; mod checker_set; mod checker_state; mod parser; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; use tracing_tree::HierarchicalLayer; fn main() { tracing_subscriber::registry() .with( HierarchicalLayer::new(2) .with_targets(false) .with_bracketed_fields(true), ) .init(); let src = r#" let set X = record { .b : Bool, .n : Nat } // basic let set Y = X let set Z = record { .y : Y } let set W = variant [ z. : Z | f. : Float ] let element x : X = { .b = true, .n = 41 } let element z : Z = { .y = x } let element the_nat : Nat = z .y .n let element injected : W = z. z let element compute : Nat = case injected of [ z. myz => myz .y .n | f. myf => 2 ] // let signature Graph = theory { // .Node :: Set, // .Edge :: (s : Node) (t : Node) -> Set // } // // let instance natPoset :: Graph = { // .Node = Nat, // .Edge = for (s : Nat) (t : Nat), Bool // } // // let element node : set-of(natPoset .Node) = 7 "#; let programme = parser::parser::program(src); assert!(programme.is_ok()); let programme = programme.unwrap(); println!("Parsed:\n```\n{}\n```\n", programme); if let Err(e) = programme.check() { println!("{}", e); } }