0
我想在OCaml中編寫一個OCaml評估器。基本上我需要模仿OCaml的typechecker。我有下面的代碼,它應該返回一個類型,但編譯器抱怨類型不匹配。我不同意這種類型的推論
let rec typecheck (expr:moexpr) (tenv:type environment) =
match expr with
| ...
| Match(e, (pat, exp)::l) -> let etype=(typecheck e tenv) in
(List.fold_left (fun (cp, ce) fp -> (typecheck ce (matchtype tenv cp etype)))
(typecheck exp tenv) (pat, exp)::l)
以我倍左我請鹼,爲(typecheck exp tenv)
這應該是一個motype(我喜歡的類型的類型)。錯誤是摺疊左功能(typecheck ce (matchtype tenv cp etype))
評估爲一個motype,這並不奇怪,但預期的類型是mopat * moexpr - mopat是我的模式類型。不應該摺疊左操作的值是基類型還是函數返回類型?
「我不同意類型檢查器說什麼」=>「我錯了我的程序」。 – gasche 2013-05-02 04:49:11