-1
我試了幾個小時,從現在開始到完成這個數據結構的定製閱讀功能:哈斯克爾錯誤使用readsPrec時 - >無法匹配類型
data Term = Monom(Float, Integer)
| Addition(Term, Term)
| Subtraktion(Term, Term)
| Multiplikation(Term, Term)
| Division(Term, Term)
讀功能背後的想法是分析綴條款如(+ (+ Monom Monom) Monom)
。現在我嘗試了Monoms,它們的編號爲2
,其翻譯爲Monom(2,0)
,而不是像2x^5
這樣的表達式,它將翻譯爲Monom(2,5)
。
instance Read Term where
readsPrec _ inp = let [(a,b)] = lex inp in
case a of
-- these are control characters for making the input look nicer
"(" -> readsPrec 0 b
")" -> readsPrec 0 b
" " -> readsPrec 0 b
-- end character -> nothing to do here
"" -> []
-- operators
"+" -> let res = readsPrec 0 b in [Addition(res)]
"-" -> let res = readsPrec 0 b in [Subtraktion(res)]
"*" -> let res = readsPrec 0 b in [Multiplikation(res)]
"/" -> let res = readsPrec 0 b in [Division(res)]
-- monom
c -> let res = readsPrec 0 b in [Monom(read c::Float,0),res]
可悲的是,這並不工作,由於這個錯誤(這發生在加法和其他運營商):
Couldn't match expected type `(Term, String)'
with actual type `Term'
In the return type of a call of `Addition'
In the expression: Addition (res)
In the expression: [Addition (res)]
能否請您給的提示,如何解決的來源?我不知道爲什麼預期的類型是(Term,String)
以及如何以適當的方式解決它。
感謝您的幫助!
感謝提示 - 你有一個快速提示如何解決這個問題?我真的不知道。 – muzy