module MapDeclM where import Recursive import IdM
A class to apply a monadic function to all declarations in a structure. The type of the structure is s, the type of the declarations is d. The functional dependency ensures that we can determine the type of declarations from the type of the structure.
class MapDeclM s d | s -> d where mapDeclM :: (Functor m, Monad m) => (d -> m d) -> s -> m s instance MapDeclM s ds => MapDeclM [s] ds where mapDeclM = mapM . mapDeclM {- A convinient function, when the definition is in terms of the underlying structure. -} std_mapDeclM f = fmap rec . mapDeclM f . struct mapDecls f m = removeId $ mapDeclM (return.map f) m