aboutsummaryrefslogtreecommitdiff
path: root/src/checker_state.rs
diff options
context:
space:
mode:
authortslil <tslil@posteo.de>2026-04-27 10:13:10 +0100
committertslil <tslil@posteo.de>2026-04-27 11:27:40 +0100
commita3205cfa58fb3cf16757c65345dd99d27e73a42f (patch)
treef2dab9ddbd4a48a668072d231139b71472d8b2f3 /src/checker_state.rs
parent1b97296cb4e043ed6ba8e200bcfc36bd60e602a9 (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.rs28
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(())
}