uniplate-1.6.9: Help writing simple, concise and fast generic operations.

Safe HaskellNone

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 -> aSource

gmapT == descend

gmapQl :: Uniplate a => (r -> r' -> r) -> r -> (a -> r') -> a -> rSource

Use children and foldl

gmapQr :: Uniplate a => (r' -> r -> r) -> r -> (a -> r') -> a -> rSource

Use children and foldr

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

gmapQi :: Uniplate a => Int -> (a -> u) -> a -> uSource

Use children and !!

gmapM :: (Uniplate a, Monad m) => (a -> m a) -> a -> m aSource

gmapM == descendM

mkT :: (a -> a) -> a -> aSource

mkT == id

everywhere :: Biplate b a => (a -> a) -> b -> bSource

everywhere == transformBi

mkM :: Monad m => (a -> m a) -> a -> m aSource

mkM == id

everywhereM :: (Biplate b a, Monad m) => (a -> m a) -> b -> m bSource

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 -> rSource

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.