classyplate-0.1.0.0: Fuseable type-class based generics

Safe HaskellNone
LanguageHaskell2010

Data.Generics.ClassyPlate.Core

Synopsis

Documentation

classyTraverse :: forall c b. ClassyPlate c b => (forall a. c a => a -> a) -> b -> b Source #

Traverse the data structure with a polymorphic function.

classyTraverseM :: forall c b m. (ClassyPlate c b, Monad m) => (forall a. c a => a -> m a) -> b -> m b Source #

Traverse the data structure with a polymorphic monadic function.

selectiveTraverse :: forall c b. ClassyPlate c b => (forall a. c a => a -> a) -> (forall a. c a => a -> Bool) -> b -> b Source #

Traverse only those parts that are selected by the given selector function.

selectiveTraverseM :: forall c b m. (ClassyPlate c b, Monad m) => (forall a. c a => a -> m a) -> (forall a. c a => a -> m Bool) -> b -> m b Source #

Traverse only those parts that are selected by the given monadic selector function.

smartTraverse :: forall c b. SmartClassyPlate c (ClassIgnoresSubtree c b) b => (forall a. c a => a -> a) -> b -> b Source #

Traverse only those parts of the data structure that could possibly contain elements that the given function can be applied on

smartTraverseM :: forall c b m. (SmartClassyPlate c (ClassIgnoresSubtree c b) b, Monad m) => (forall a. c a => a -> m a) -> b -> m b Source #

Traverse only those parts of the data structure that could possibly contain elements that the given monadic function can be applied on

class GoodOperationFor c b => ClassyPlate c b where Source #

A class for traversals that use a polymorphic function to visit all applicable elements.

Methods

classyTraverse_ :: ClsToken c -> (forall a. c a => a -> a) -> b -> b Source #

classyTraverseM_ :: Monad m => ClsToken c -> (forall a. c a => a -> m a) -> b -> m b Source #

selectiveTraverse_ :: ClsToken c -> (forall a. c a => a -> a) -> (forall a. c a => a -> Bool) -> b -> b Source #

selectiveTraverseM_ :: Monad m => ClsToken c -> (forall a. c a => a -> m a) -> (forall a. c a => a -> m Bool) -> b -> m b Source #

class GoodOperationForAuto c b => SmartClassyPlate c sel b where Source #

A class for traversals that use a polymorphic function to visit all applicable elements but only visit the parts where the applicable elements could be found.

Minimal complete definition

smartTraverse_, smartTraverseM_

Methods

smartTraverse_ :: FlagToken sel -> ClsToken c -> (forall a. c a => a -> a) -> b -> b Source #

smartTraverseM_ :: Monad m => FlagToken sel -> ClsToken c -> (forall a. c a => a -> m a) -> b -> m b Source #

Instances

GoodOperationForAuto c b => SmartClassyPlate c True b Source # 

Methods

smartTraverse_ :: FlagToken True -> ClsToken c -> (forall a. c a => a -> a) -> b -> b Source #

smartTraverseM_ :: Monad m => FlagToken True -> ClsToken c -> (forall a. c a => a -> m a) -> b -> m b Source #

classyTraverse_ :: ClassyPlate c b => ClsToken c -> (forall a. c a => a -> a) -> b -> b Source #

classyTraverseM_ :: (ClassyPlate c b, Monad m) => ClsToken c -> (forall a. c a => a -> m a) -> b -> m b Source #

selectiveTraverse_ :: ClassyPlate c b => ClsToken c -> (forall a. c a => a -> a) -> (forall a. c a => a -> Bool) -> b -> b Source #

selectiveTraverseM_ :: (ClassyPlate c b, Monad m) => ClsToken c -> (forall a. c a => a -> m a) -> (forall a. c a => a -> m Bool) -> b -> m b Source #

smartTraverse_ :: SmartClassyPlate c sel b => FlagToken sel -> ClsToken c -> (forall a. c a => a -> a) -> b -> b Source #

smartTraverseM_ :: (SmartClassyPlate c sel b, Monad m) => FlagToken sel -> ClsToken c -> (forall a. c a => a -> m a) -> b -> m b Source #

app :: App flag c b => FlagToken flag -> ClsToken c -> (forall a. c a => a -> a) -> b -> b Source #

appM :: (App flag c b, Monad m) => FlagToken flag -> ClsToken c -> (forall a. c a => a -> m a) -> b -> m b Source #

appIf :: forall c b. App (AppSelector c b) c b => ClsToken c -> (forall a. c a => a -> a) -> (forall a. c a => a -> Bool) -> b -> b -> b Source #

appIfM :: forall c b m. (App (AppSelector c b) c b, Monad m) => ClsToken c -> (forall a. c a => a -> m a) -> (forall a. c a => a -> m Bool) -> b -> m b -> m b Source #

type GoodOperationFor c e = App (AppSelector c e) c e Source #

class MonoMatch a b where Source #

A class for the simple case when the applied function is monomorphic.

Minimal complete definition

monoApp

Methods

monoApp :: (a -> a) -> b -> b Source #

Apply a monomorphic function on a polymorphic data structure.

Instances

MonoMatch a a Source # 

Methods

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

type AppSelector (MonoMatch a) b Source #