From c96a56a7ac898a0ff74ccf15bc2e5561d30de53a Mon Sep 17 00:00:00 2001 From: greg Date: Thu, 17 May 2018 23:21:23 -0700 Subject: [PATCH] fresh --- schala-lang/src/typechecking.rs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/schala-lang/src/typechecking.rs b/schala-lang/src/typechecking.rs index 0fdfc48..87827f6 100644 --- a/schala-lang/src/typechecking.rs +++ b/schala-lang/src/typechecking.rs @@ -260,7 +260,7 @@ impl TypeContext { pub fn type_check_ast(&mut self, ast: &parsing::AST) -> TypeResult { let ref block = ast.0; - let mut infer = Infer::new(); + let mut infer = Infer::default(); let output = infer.infer_block(block); match output { Ok(s) => Ok(format!("{:?}", s)), @@ -270,9 +270,9 @@ impl TypeContext { } // this is the equivalent of the Haskell Infer monad -#[derive(Debug)] +#[derive(Debug, Default)] struct Infer { - + _idents: u32, } #[derive(Debug)] @@ -283,8 +283,11 @@ enum InferError { } impl Infer { - fn new() -> Infer { - Infer { } + fn fresh(&mut self) -> MonoType { + let i = self._idents; + self._idents += 1; + let name = Rc::new(format!("{}", ('a' as u8 + 1) as char)); + MonoType::Var(name) } fn infer_block(&mut self, block: &Vec) -> Result {