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

Safe HaskellNone
LanguageHaskell98

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, Monad 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 :: Monad m => (a -> m a) -> a -> m a Source

mkM == id

everywhereM :: (Biplate b a, Monad 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.