diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/evaluators/Lambda.ml | 8 |
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 -> |
