summaryrefslogtreecommitdiff
path: root/lambda-calcul/rust/src/lambda.rs
diff options
context:
space:
mode:
authorArnaud Bailly <arnaud@pankzsoft.com>2025-10-09 16:06:24 +0200
committerArnaud Bailly <arnaud@pankzsoft.com>2025-10-09 16:06:24 +0200
commit68d05695856709ee1c251e496fb5b79a17134dbc (patch)
tree8fb87c3575c1b30ea501540c410d38e58f09d588 /lambda-calcul/rust/src/lambda.rs
parentecb4c59eb89a01ee2dea6495f6287cd0709ce403 (diff)
downloadlambda-nantes-68d05695856709ee1c251e496fb5b79a17134dbc.tar.gz
feat: introduce arrow types
Diffstat (limited to 'lambda-calcul/rust/src/lambda.rs')
-rw-r--r--lambda-calcul/rust/src/lambda.rs15
1 files changed, 12 insertions, 3 deletions
diff --git a/lambda-calcul/rust/src/lambda.rs b/lambda-calcul/rust/src/lambda.rs
index c624b19..1a1a85b 100644
--- a/lambda-calcul/rust/src/lambda.rs
+++ b/lambda-calcul/rust/src/lambda.rs
@@ -149,12 +149,11 @@ pub fn generate_expression_to_type(size: u32, runner: &mut TestRunner) -> Vec<Va
0 => {
let n = any::<u16>().new_tree(runner).unwrap().current();
vec![Value::Num(n.into())]
- },
+ }
_ => {
let n = any::<bool>().new_tree(runner).unwrap().current();
vec![Value::Bool(n.into())]
- },
-
+ }
}
}
@@ -358,4 +357,14 @@ mod lambda_test {
assert!(ty.is_err());
}
+
+ #[test]
+ fn type_of_a_typed_abstraction_yields_a_function_type() {
+ let value = parse1("(tlam (x :Num) 42)");
+ let mut ctx = Environment::new();
+
+ let ty = type_of(&value, &mut ctx).unwrap();
+
+ assert_eq!(Type::Arr(Box::new(Type::Num), Box::new(Type::Num)), ty);
+ }
}