0
我得到一个匹配错误:哈斯克尔 - 类错误应用:类型不匹配
当我尝试在标线执行此代码Expression : parseExpr (append p e) es
Term : parseExpr
Type : Expr -> String
Does not match : a -> b -> c
:
data Expr = Atom String | Var String | Pred String [Expr] | Expr String
append :: String -> String -> String
append a b = a++b
parseExpr :: Expr -> String
parseExpr (Atom a) = a
parseExpr (Var x) = x
parseExpr (Pred p (e:es)) = parseExpr (append p e) es -- ERROR HERE
尽管电子始终将成为我上面陈述的Expr对象定义中的一个字符串。有没有办法说明这一点?
错误消息似乎对我来说足够清晰。 'parseExpr'的类型是'Expr - > String',但是你用两个参数来调用它。在'parseExpr(Pred p(e:es))= ...'中, – kosmikus 2014-11-22 13:03:29
=''p'将成为'String','e'将成为'Expr','es'将成为'[Expr]'。你为什么认为'e'会是一个'String'? – ErikR 2014-11-22 13:19:22
@ user5402因为Expr总是可以细分为一个字符串,我猜?这不正确吗?我正在尝试为Expr执行toString。 – SalmaFG 2014-11-22 13:23:48