Haskell - 应用程序中的类型错误:类型不匹配

时间:2014-11-22 13:01:09

标签: haskell functional-programming pattern-matching hugs

我收到了匹配错误:

  

Expression:parseExpr(append p e)es

     

术语:parseExpr

     

类型:Expr - >串

     

不匹配:a - > b - > ç

当我尝试在标记的行中执行此代码时:

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

虽然e总是来自我上面提到的Expr对象定义的String。有没有办法说明这个?

1 个答案:

答案 0 :(得分:1)

也许你的困惑在这里:

data Expr = ... | Expr String

这并不意味着每个Expr都可以转换为字符串。它只是意味着有一个名为Expr的函数,它接受String并返回Expr(类型)。

parseExpr案例定义Pred的明显方法是在parseExpr列表的元素上调用Expr,例如:

parseExpr (Pred p exprs) = 
    let strs = map parseExpr exprs  -- this is a [String]
        s    = concat strs          -- this is a String
    in p ++ s

也许您希望s = intercalate " " strs将字符串与空格连接在一起?一个具体的例子会有所帮助。