Я получаю ошибку соответствия:Haskell - Тип ошибки в применении: Тип не соответствует
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
Хотя е всегда будет String из определения объекта Expr, о котором я говорил выше. Есть ли способ заявить об этом?
Сообщение об ошибке кажется достаточно ясным для меня. 'parseExpr' имеет тип' Expr -> String', но вы вызываете его с двумя аргументами. – kosmikus
в 'parseExpr (Pred p (e: es)) = ...' 'p' будет' String', 'e' будет' Expr', а 'es' будет' [Expr] '. Почему вы думаете, что 'e' будет' String'? – ErikR
@ user5402 Потому что Expr всегда можно разбить на String, я думаю? Разве это не так? Я пытаюсь выполнить toString для Expr. – SalmaFG