diff --git a/schala-lang/language/src/builtin.rs b/schala-lang/language/src/builtin.rs index cb2c7d7..c150fe2 100644 --- a/schala-lang/language/src/builtin.rs +++ b/schala-lang/language/src/builtin.rs @@ -1,6 +1,5 @@ use std::rc::Rc; use std::collections::HashMap; -use std::fmt; use crate::tokenizing::TokenKind; use crate::typechecking::{TypeConst, Type}; diff --git a/schala-lang/language/src/typechecking.rs b/schala-lang/language/src/typechecking.rs index 0dad3c8..8429060 100644 --- a/schala-lang/language/src/typechecking.rs +++ b/schala-lang/language/src/typechecking.rs @@ -28,7 +28,7 @@ pub enum Type { Arrow(Box, Box) } -#[derive(Debug, Clone)] +#[derive(Debug, Clone, PartialEq)] pub enum TypeConst { Unit, Nat, @@ -224,7 +224,10 @@ impl<'a> TypeContext<'a> { fn unify(&mut self, t1: Type, t2: Type) -> InferResult { - println!("Unify ain't done yo"); - Ok(t1) + use self::Type::*; use self::TypeConst::*; + Ok(match (t1, t2) { + (Const(ref c1), Const(ref c2)) if c1 == c2 => Const(c1.clone()), //choice of c1 is arbitrary I *think* + (a, b) => return TypeError::new(&format!("{:?} and {:?} do not unify", a, b)), + }) } }