Haskell のクラスの宿題をしていて、インタープリターを作成しています。関数の最初のセットは、変数を評価することです。
evalE (Var x) s = subEv (Map.lookup x s)
where subEv (Just a) = a
subEv (Nothing) = (IntVal 0)
evalE (Val v) s = v
evalE (Op o e1 e2) s = (evalE e1 s) 'o' (evalE e2 s)
したがって、最初の 2 つのバージョンは正常に動作し、問題は 3 番目の evalE にあります。コンパイラは、とが引数として与えられている(evalE e1 s) 'o' (evalE e2 s)
かのように解釈し続けますo
(evalE e2 s)
(evalE e1 s)
最初の閉じ括弧の存在を無視している理由がわかりません。また、haskell を初めて使用するので、その行のどこに構文エラーがあるかわかりません。しかし、それにもかかわらず、コンパイラはコンパイルせず、evalE への引数が多すぎると言います。ここから何かが完全に欠けていますか?
さらにテストすると、関数が呼び出される evalE のコード内のどこでも同じ問題が発生します (再帰的でない関数でさえ、 ')' を無視しているようです)。