From 1edd925ed580bd5fe4d42052933cb0575dc0bf37 Mon Sep 17 00:00:00 2001 From: Mylloon Date: Mon, 4 Dec 2023 18:33:56 +0100 Subject: [PATCH] type checking --- flap/src/hopix/hopixTypechecker.ml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/flap/src/hopix/hopixTypechecker.ml b/flap/src/hopix/hopixTypechecker.ml index 0699559..036af21 100644 --- a/flap/src/hopix/hopixTypechecker.ml +++ b/flap/src/hopix/hopixTypechecker.ml @@ -2,6 +2,8 @@ open HopixAST +let get_aty (HopixTypes.Scheme (_, aty_value)) : HopixTypes.aty = aty_value + (** Error messages *) let invalid_instantiation pos given expected = @@ -203,7 +205,9 @@ and check_expression fun env (Position.{ value = e; position = pos } as exp) expected -> match e with | Fun df -> failwith "Students! This is your job! Fun check" - | _ -> failwith "Students! This is your job! check_expression wildcard" + | _ -> + let given = synth_expression env exp in + check_equal_types pos ~expected ~given and check_value_definition : HopixTypes.typing_environment -> HopixAST.value_definition @@ -212,10 +216,11 @@ and check_value_definition fun env -> function | SimpleValue (id, ty, ex) -> (match ty with - | None -> failwith "Type missing." + | None -> failwith "A type is missing." | Some ty' -> (*failwith "Students! This is your job! (check_value_definition | SimpleValue)"*) - let tys, _ = Position.located_pos (check_type_scheme env) ty' in + let tys, tenv = Position.located_pos (check_type_scheme env) ty' in + check_expression tenv ex (get_aty tys); HopixTypes.bind_value (Position.value id) tys env) | RecFunctions _ -> (* Je crois que c'est galère et donc c'est pas grave si on arrive pas