我正在做一個關於haskell的類的作業,我們正在構建一個解釋器。第一組的職能是評估的變量,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)
因此,前兩個版本的做工精細,問題是在第三evalE,編譯器不斷解釋(evalE e1 s) 'o' (evalE e2 s)
彷彿o
和(evalE e2 s)
都報錯參數(evalE e1 s)
我不明白爲什麼它忽略了第一個右括號的存在,而我是haskell的新手,所以我看不到其中的語法錯誤在哪裏。但不管怎樣,編譯器都不會編譯,並且說evalE有太多爭論,而且我快速失去耐心,因爲它看起來似乎沒有任何錯誤。我完全錯過了從這裏的東西?
在進一步的測試,同樣的問題出現在任何地方爲evalE的代碼調用函數時(即使函數沒有被遞歸似乎忽略「)」)
請不要忽略語法的「haskell」,但你的編譯器,它是... ghc?擁抱? NHC? YHC? - 無論如何,「a b c」的意思是「將函數a應用於參數b和c」(在您的情況下,「a」是表達式的結果)。 – scravy