----------------------------------------------------------------------------- -- -- Module : Data.Generics.Extras -- Copyright : (c) Phil Freeman 2013 -- License : MIT -- -- Maintainer : Phil Freeman -- Stability : experimental -- Portability : -- -- | -- Additional SYB combinators -- ----------------------------------------------------------------------------- {-# LANGUAGE Rank2Types #-} module Data.Generics.Extras where import Data.Data -- | -- Apply a top-down monadic transformation everywhere -- everywhereM' :: (Monad m, Data d) => (forall d1. (Data d1) => d1 -> m d1) -> d -> m d everywhereM' f x = do y <- f x gmapM (everywhereM' f) y