我是 Ocaml 的初学者。我正在尝试编写一些关于正常顺序减少的代码,并且被某些语法所迷惑。以下是一些用于隔离我的错误的截断代码。
type expr =
| Var of char
| Num of int
| Lambda of expr
| Apply of expr * expr
let rec substitute f id e = match f with
| Num(i) -> if id == i then e else f
| _ -> f
let rec beta_lor e = match e with
| Apply(Lambda(f), e2) -> substitute f 1 e2
| Apply(e1,e2) -> beta_lor e1
| Lambda e1 -> beta_lor e1
| _ -> None
在 .mli 文件中,我声称 beta_lor 的类型为:val beta_lor: expr -> expr option
现在,当我编译此文件时,它报告有关我在 beta_lor 中使用的“无”行的错误:错误:此表达式的类型为 'a 选项,但预期的表达式类型为 expr
我知道 ocaml 编译器试图进行类型推断,它希望我输出一个表达式,而不是 'a 选项,但我声称 beta_lor 可能输出选项?我有点困惑,请帮助。