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