aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/evaluators/Lambda.ml8
1 files changed, 5 insertions, 3 deletions
diff --git a/lib/evaluators/Lambda.ml b/lib/evaluators/Lambda.ml
index 48ae6ec..a75fc10 100644
--- a/lib/evaluators/Lambda.ml
+++ b/lib/evaluators/Lambda.ml
@@ -77,16 +77,18 @@ let reduce (Program (term, dir)) =
end
| Abstract (binder, body) -> Ok (Closure (binder, body, env))
| Apply (operator, operand) ->
- let* operator = eval env operation in
+ let* operator = eval env operator in
match operator with
| Relation _ -> Error (Error.not_applicable ())
- | _ -> failwith "TODO"
+ | Closure (binder, body, closed) ->
+ let* argument = eval env operand in
+ eval (BatMap.String.add binder argument closed) body
in
eval BatMap.String.empty term
let execute term =
let open Utilities.Result in
- let* value = reduce context term in
+ let* value = reduce term in
match value with
| Closure _ -> Error (Error.unapplied_abstraction ())
| Relation handle ->