I've written a Haskell function like so:
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)]
With a data type like so data Subst a = S [(String,a)]
I've declared subst
as subst :: Subst a -> a -> a
and vars
asvars :: a -> [String]
. When I run this, I get a type error. Any ideas why?