Ошибка типа в функции 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]
,