Я написал функцию 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]
. Когда я запускаю это, я получаю ошибку типа. Есть идеи, почему?