aboutsummaryrefslogtreecommitdiff
path: root/src/type/mod.rs
diff options
context:
space:
mode:
authorJoel Kronqvist <joel.kronqvist@iki.fi>2025-08-02 17:53:09 +0300
committerJoel Kronqvist <joel.kronqvist@iki.fi>2025-08-02 17:53:09 +0300
commit9121a0b782d2cd6551a393f1d3a79c7b092e4873 (patch)
treedea5e6644131d76b4456296d30f60d9c846af919 /src/type/mod.rs
parent0f9542109275de75641185d4d94dbe7c35a49088 (diff)
downloadmyslip-9121a0b782d2cd6551a393f1d3a79c7b092e4873.tar.gz
myslip-9121a0b782d2cd6551a393f1d3a79c7b092e4873.zip
Added tests for type_check. Implemented std::fmt::Display for many enums. Added type variants List(Type), and UndefinedType for use in error messages. Implemented type utility arr(a, b).
Diffstat (limited to 'src/type/mod.rs')
-rw-r--r--src/type/mod.rs35
1 files changed, 22 insertions, 13 deletions
diff --git a/src/type/mod.rs b/src/type/mod.rs
index 623edc9..12d1132 100644
--- a/src/type/mod.rs
+++ b/src/type/mod.rs
@@ -1,34 +1,43 @@
-use crate::sexp::{SExp, SExp::*};
+pub mod util;
+pub mod display;
+pub mod check;
+
+
+use crate::sexp::SExp;
+
+
+#[derive(Debug,PartialEq)]
pub enum Type {
+
Integer,
+
Arrow(Box<Type>, Box<Type>),
+
+ List(Vec<Type>),
+
+ UndefinedType, // only for errors
+
}
+
+#[derive(Debug,PartialEq)]
pub enum TypeError {
+
UndefinedVariable(String),
+
InvalidOperator {
operator: SExp,
expected: Type,
found: Type,
},
+
InvalidArgList {
arglist: SExp,
expected: Type,
found: Type,
},
- OtherError
-}
-impl SExp {
- /// ```rust
- /// use melisp::{
- /// r#type::{*, Type::*, TypeError::*},
- /// sexp::{SExp::*, SLeaf::*, util::*},
- /// };
- /// ```
- pub fn type_check(&self) -> Result<Type, TypeError> {
- todo!()
- }
+ OtherError
}