mod ast; mod checker; mod checker_set; mod checker_signature; 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 signature Graph = theory { Node :: Set, Edge :: (s : set-of(Node)) (t : set-of(Node)) -> Set } let set FinTwo = variant [ zero : record{} | one : record{} ] let instance natGraph :: Graph = { .Node = FinTwo :: Set, .Edge = for (s : set-of(Node)) (t : set-of(Node)), case s of [ zero. ignore => Bool :: Set | one. ignore => Nat :: Set ] } let set NatEdges = record { source: set-of(natGraph .Node), target: set-of(natGraph .Node), connected: set-of(natGraph .Edge source target) } let element s_val : FinTwo = zero. {} let element edge : set-of(natGraph .Edge s_val ( one. {} )) = true "#; let programme = parser::debug_parse(src); if let Err(e) = programme.check() { println!("{}", e); } }