uniplate-1.6.13: Help writing simple, concise and fast generic operations.
Safe HaskellNone
LanguageHaskell2010

Data.Generics.SYB

Description

SYB compatibility layer. This module serves as a drop-in replacement in some situations for some of the SYB operations. Users should also import Data.Generics.Uniplate.Data.

SYB is described in the paper: "Scrap your boilerplate: a practical design pattern for generic programming" by Ralf Lammel and Simon Peyton Jones.

Synopsis

Documentation

gmapT :: Uniplate a => (a -> a) -> a -> a Source #

gmapT == descend

gmapQl :: Uniplate a => (r -> r' -> r) -> r -> (a -> r') -> a -> r Source #

Use children and foldl

gmapQr :: Uniplate a => (r' -> r -> r) -> r -> (a -> r') -> a -> r Source #

Use children and foldr

gmapQ :: Uniplate a => (a -> u) -> a -> [u] Source #

gmapQi :: Uniplate a => Int -> (a -> u) -> a -> u Source #

Use children and !!

gmapM :: (Uniplate a, Applicative m) => (a -> m a) -> a -> m a Source #

gmapM == descendM

mkT :: (a -> a) -> a -> a Source #

mkT == id

everywhere :: Biplate b a => (a -> a) -> b -> b Source #

everywhere == transformBi

mkM :: (a -> m a) -> a -> m a Source #

mkM == id

everywhereM :: (Biplate b a, Monad m, Applicative m) => (a -> m a) -> b -> m b Source #

everywhereM == transformBiM

mkQ :: r -> (a -> r) -> (r, a -> r) Source #

Only for use with everything

everything :: Biplate b a => (r -> r -> r) -> (r, a -> r) -> b -> r Source #

Use universe or universeBi, perhaps followed by a fold.

Not an exact equivalent to the SYB everything, as the operators may be applied in different orders.