diff options
| author | tslil <tslil@posteo.de> | 2026-04-27 10:13:10 +0100 |
|---|---|---|
| committer | tslil <tslil@posteo.de> | 2026-04-27 11:27:40 +0100 |
| commit | a3205cfa58fb3cf16757c65345dd99d27e73a42f (patch) | |
| tree | f2dab9ddbd4a48a668072d231139b71472d8b2f3 /src/checker_state.rs | |
| parent | 1b97296cb4e043ed6ba8e200bcfc36bd60e602a9 (diff) | |
add distinction between hypothetical and concrete elements to the set checker, it now enforces that all arms in case are well typed!
Diffstat (limited to 'src/checker_state.rs')
| -rw-r--r-- | src/checker_state.rs | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/src/checker_state.rs b/src/checker_state.rs index 30f83be..7590457 100644 --- a/src/checker_state.rs +++ b/src/checker_state.rs @@ -41,9 +41,22 @@ pub struct SetField { } #[derive(Display, Clone)] -#[display("{element} : {set}")] +pub enum ElementValue { + Concrete(Element), + #[display("_ : {_0}")] + Hypothetical(Set), +} + +impl From<Element> for ElementValue { + fn from(e: Element) -> ElementValue { + ElementValue::Concrete(e) + } +} + +#[derive(Display, Clone)] +#[display("{value} : {set}")] pub struct CheckedElement { - pub element: Element, + pub value: ElementValue, pub set: Set, } @@ -198,12 +211,17 @@ impl CheckerState { pub fn add_element( &mut self, name: String, - element: Element, + element: ElementValue, set: Set, ) -> Result<(), CheckerError> { self.assert_unbound_element(&name)?; - self.wf_elements - .insert(name, CheckedElement { element, set }); + self.wf_elements.insert( + name, + CheckedElement { + value: element, + set, + }, + ); Ok(()) } |
