-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