У меня есть эти данные на моем Haskell код:Haskell: переменная ошибка Жесткий тип
data Symtable a = General a | Stack a
class Evaluable e where
eval :: (Num a, Ord a) => (Ident -> Maybe a) -> (e a) -> (Either String a)
typeCheck :: (Ident -> String) -> (e a) -> Bool
instance (Num a, Ord a) => Evaluable (NExpr a) where
eval _ (Const n) = Right n
typeCheck f f2 = True --to make the code compilable
это дает мне ошибку на определении Eval, потому что он говорит: не может соответствовать типа «е» с NExpr» 'е' представляет собой жесткий тип переменной связан ... Eval :: ... ожидается еа фактический Nexpr
идент = строки и Nexpr:
data NExpr n = Const n |
Var Ident |
Plus (NExpr n) (NExpr n) |
Minus (NExpr n) (NExpr n) |
Times (NExpr n) (NExpr n)
, как ее решить?
Изменить экземпляр на 'instance (Num a, Ord a) => Evaluable NExpr где ...' – Alec
, тогда он говорит: Ожидая еще одного аргумента Nexpr, первый аргумент Evaluable должен иметь вид *, но имеет вид * -> * @Alec –