ocaml中的环境 - “类型a”的语法错误env`

时间:2018-01-30 22:46:47

标签: compiler-errors syntax-error ocaml

我需要声明并使用ocaml中的环境。在我的学习书中,我找到了以下代码:

type a' env =  (string * 'a)list;;
exception WrongBindList;;
let emptyenv(x) = [("", x)];;
let rec applyenv(x, y) = match x with
        | [(_, e)] -> e
        | (i1, e1) :: x1 -> if y = i1 then e1 
                 else applyenv(x1, y)
        | [] -> failwith("wrong env")   ;;   
let bind(r, l, e) = (l, e) :: r ;;

type evT = Unbound |  FunVal of evFun | RecFunVal of string*evFun
and evFun = string * exp * (evT env);;

但是当我运行代码时,我收到以下错误:

Type exp defined.
#Toplevel input:
>type a' env =  (string * 'a)list;;
>        ^^^
Syntax error.

为什么我收到此错误?我很想知道我做错了什么。

2 个答案:

答案 0 :(得分:3)

type a' env应为type 'a env

'a,名称前面的撇号是一个类型变量。它也在等号的右侧再次提到。 a'只是一个先前未定义的标识符,但在该位置显然不具有语法有效性。

答案 1 :(得分:2)

您需要将引号放在类型变量名之前而不是之后:

type 'a env =  (string * 'a) list