Ошибка типа в функции Haskell

Я написал функцию Haskell следующим образом:

shift :: Subst a -> Subst a
shift (S s) = [(x, (subst s' d)) | (x,d) <- s] where 
      s' = [(x,d) | (x,d) <- s, null (vars d)]

С типом данных вроде data Subst a = S [(String,a)]

Я объявил subst как subst :: Subst a -> a -> a а также vars какvars :: a -> [String], Когда я запускаю это, я получаю ошибку типа. Есть идеи почему?

1 ответ

Решение

Ваш shift объявлена ​​функция возврата Subst, но это действительно возвращает список. Вы, вероятно, хотели обернуть Subst конструктор по всему списку.

Тогда ваш subst функция объявлена ​​принять Subst аргумент, но вы называете это списком - та же проблема в принципе.

Также ваш vars функция, вероятно, также содержит ошибку типа, потому что, как я указал в своем ответе на предыдущий вопрос, вы не можете определить значимую функцию типа a -> [String],

Другие вопросы по тегам