Copyright | 2011-2012 Universiteit Utrecht University of Oxford |
---|---|
License | BSD3 |
Maintainer | generics@haskell.org |
Stability | experimental |
Portability | non-portable |
Safe Haskell | Trustworthy |
Language | Haskell2010 |
Generics.Deriving.Uniplate
Description
Summary: Functions inspired by the Uniplate generic programming library, mostly implemented by Sean Leather.
Synopsis
- class Uniplate a where
- uniplate :: Uniplate a => a -> ([a], [a] -> a)
- universe :: Uniplate a => a -> [a]
- rewrite :: Uniplate a => (a -> Maybe a) -> a -> a
- rewriteM :: (Monad m, Uniplate a) => (a -> m (Maybe a)) -> a -> m a
- contexts :: Uniplate a => a -> [(a, a -> a)]
- holes :: Uniplate a => a -> [(a, a -> a)]
- para :: Uniplate a => (a -> [r] -> r) -> a -> r
- childrendefault :: (Generic a, Uniplate' (Rep a) a) => a -> [a]
- contextdefault :: (Generic a, Context' (Rep a) a) => a -> [a] -> a
- descenddefault :: (Generic a, Uniplate' (Rep a) a) => (a -> a) -> a -> a
- descendMdefault :: (Generic a, Uniplate' (Rep a) a, Monad m) => (a -> m a) -> a -> m a
- transformdefault :: (Generic a, Uniplate' (Rep a) a) => (a -> a) -> a -> a
- transformMdefault :: (Generic a, Uniplate' (Rep a) a, Monad m) => (a -> m a) -> a -> m a
- class Uniplate' f b where
Generic Uniplate class
Methods
children :: (Generic a, Uniplate' (Rep a) a) => a -> [a] #
context :: (Generic a, Context' (Rep a) a) => a -> [a] -> a #
descend :: (a -> a) -> a -> a #
descend :: (Generic a, Uniplate' (Rep a) a) => (a -> a) -> a -> a #
descendM :: Monad m => (a -> m a) -> a -> m a #
descendM :: (Generic a, Uniplate' (Rep a) a, Monad m) => (a -> m a) -> a -> m a #
transform :: (a -> a) -> a -> a #
transform :: (Generic a, Uniplate' (Rep a) a) => (a -> a) -> a -> a #
transformM :: Monad m => (a -> m a) -> a -> m a #
transformM :: (Generic a, Uniplate' (Rep a) a, Monad m) => (a -> m a) -> a -> m a #
Instances
Uniplate Bool # | |
Defined in Generics.Deriving.Uniplate | |
Uniplate Char # | |
Defined in Generics.Deriving.Uniplate | |
Uniplate Double # | |
Defined in Generics.Deriving.Uniplate Methods children :: Double -> [Double] # context :: Double -> [Double] -> Double # descend :: (Double -> Double) -> Double -> Double # descendM :: Monad m => (Double -> m Double) -> Double -> m Double # transform :: (Double -> Double) -> Double -> Double # transformM :: Monad m => (Double -> m Double) -> Double -> m Double # | |
Uniplate Float # | |
Defined in Generics.Deriving.Uniplate | |
Uniplate Int # | |
Uniplate () # | |
Uniplate [a] # | |
Uniplate (Maybe a) # | |
Defined in Generics.Deriving.Uniplate Methods children :: Maybe a -> [Maybe a] # context :: Maybe a -> [Maybe a] -> Maybe a # descend :: (Maybe a -> Maybe a) -> Maybe a -> Maybe a # descendM :: Monad m => (Maybe a -> m (Maybe a)) -> Maybe a -> m (Maybe a) # transform :: (Maybe a -> Maybe a) -> Maybe a -> Maybe a # transformM :: Monad m => (Maybe a -> m (Maybe a)) -> Maybe a -> m (Maybe a) # | |
Uniplate (Either a b) # | |
Defined in Generics.Deriving.Uniplate Methods children :: Either a b -> [Either a b] # context :: Either a b -> [Either a b] -> Either a b # descend :: (Either a b -> Either a b) -> Either a b -> Either a b # descendM :: Monad m => (Either a b -> m (Either a b)) -> Either a b -> m (Either a b) # transform :: (Either a b -> Either a b) -> Either a b -> Either a b # transformM :: Monad m => (Either a b -> m (Either a b)) -> Either a b -> m (Either a b) # | |
Uniplate (b, c) # | |
Defined in Generics.Deriving.Uniplate Methods children :: (b, c) -> [(b, c)] # context :: (b, c) -> [(b, c)] -> (b, c) # descend :: ((b, c) -> (b, c)) -> (b, c) -> (b, c) # descendM :: Monad m => ((b, c) -> m (b, c)) -> (b, c) -> m (b, c) # transform :: ((b, c) -> (b, c)) -> (b, c) -> (b, c) # transformM :: Monad m => ((b, c) -> m (b, c)) -> (b, c) -> m (b, c) # | |
Uniplate (b, c, d) # | |
Defined in Generics.Deriving.Uniplate Methods children :: (b, c, d) -> [(b, c, d)] # context :: (b, c, d) -> [(b, c, d)] -> (b, c, d) # descend :: ((b, c, d) -> (b, c, d)) -> (b, c, d) -> (b, c, d) # descendM :: Monad m => ((b, c, d) -> m (b, c, d)) -> (b, c, d) -> m (b, c, d) # transform :: ((b, c, d) -> (b, c, d)) -> (b, c, d) -> (b, c, d) # transformM :: Monad m => ((b, c, d) -> m (b, c, d)) -> (b, c, d) -> m (b, c, d) # | |
Uniplate (b, c, d, e) # | |
Defined in Generics.Deriving.Uniplate Methods children :: (b, c, d, e) -> [(b, c, d, e)] # context :: (b, c, d, e) -> [(b, c, d, e)] -> (b, c, d, e) # descend :: ((b, c, d, e) -> (b, c, d, e)) -> (b, c, d, e) -> (b, c, d, e) # descendM :: Monad m => ((b, c, d, e) -> m (b, c, d, e)) -> (b, c, d, e) -> m (b, c, d, e) # transform :: ((b, c, d, e) -> (b, c, d, e)) -> (b, c, d, e) -> (b, c, d, e) # transformM :: Monad m => ((b, c, d, e) -> m (b, c, d, e)) -> (b, c, d, e) -> m (b, c, d, e) # | |
Uniplate (b, c, d, e, f) # | |
Defined in Generics.Deriving.Uniplate Methods children :: (b, c, d, e, f) -> [(b, c, d, e, f)] # context :: (b, c, d, e, f) -> [(b, c, d, e, f)] -> (b, c, d, e, f) # descend :: ((b, c, d, e, f) -> (b, c, d, e, f)) -> (b, c, d, e, f) -> (b, c, d, e, f) # descendM :: Monad m => ((b, c, d, e, f) -> m (b, c, d, e, f)) -> (b, c, d, e, f) -> m (b, c, d, e, f) # transform :: ((b, c, d, e, f) -> (b, c, d, e, f)) -> (b, c, d, e, f) -> (b, c, d, e, f) # transformM :: Monad m => ((b, c, d, e, f) -> m (b, c, d, e, f)) -> (b, c, d, e, f) -> m (b, c, d, e, f) # | |
Uniplate (b, c, d, e, f, g) # | |
Defined in Generics.Deriving.Uniplate Methods children :: (b, c, d, e, f, g) -> [(b, c, d, e, f, g)] # context :: (b, c, d, e, f, g) -> [(b, c, d, e, f, g)] -> (b, c, d, e, f, g) # descend :: ((b, c, d, e, f, g) -> (b, c, d, e, f, g)) -> (b, c, d, e, f, g) -> (b, c, d, e, f, g) # descendM :: Monad m => ((b, c, d, e, f, g) -> m (b, c, d, e, f, g)) -> (b, c, d, e, f, g) -> m (b, c, d, e, f, g) # transform :: ((b, c, d, e, f, g) -> (b, c, d, e, f, g)) -> (b, c, d, e, f, g) -> (b, c, d, e, f, g) # transformM :: Monad m => ((b, c, d, e, f, g) -> m (b, c, d, e, f, g)) -> (b, c, d, e, f, g) -> m (b, c, d, e, f, g) # | |
Uniplate (b, c, d, e, f, g, h) # | |
Defined in Generics.Deriving.Uniplate Methods children :: (b, c, d, e, f, g, h) -> [(b, c, d, e, f, g, h)] # context :: (b, c, d, e, f, g, h) -> [(b, c, d, e, f, g, h)] -> (b, c, d, e, f, g, h) # descend :: ((b, c, d, e, f, g, h) -> (b, c, d, e, f, g, h)) -> (b, c, d, e, f, g, h) -> (b, c, d, e, f, g, h) # descendM :: Monad m => ((b, c, d, e, f, g, h) -> m (b, c, d, e, f, g, h)) -> (b, c, d, e, f, g, h) -> m (b, c, d, e, f, g, h) # transform :: ((b, c, d, e, f, g, h) -> (b, c, d, e, f, g, h)) -> (b, c, d, e, f, g, h) -> (b, c, d, e, f, g, h) # transformM :: Monad m => ((b, c, d, e, f, g, h) -> m (b, c, d, e, f, g, h)) -> (b, c, d, e, f, g, h) -> m (b, c, d, e, f, g, h) # |
Derived functions
Default definitions
childrendefault :: (Generic a, Uniplate' (Rep a) a) => a -> [a] #
contextdefault :: (Generic a, Context' (Rep a) a) => a -> [a] -> a #
descenddefault :: (Generic a, Uniplate' (Rep a) a) => (a -> a) -> a -> a #
transformdefault :: (Generic a, Uniplate' (Rep a) a) => (a -> a) -> a -> a #
Internal Uniplate class
Minimal complete definition
Methods
descend' :: (b -> b) -> f a -> f a #
descendM' :: Monad m => (b -> m b) -> f a -> m (f a) #
transform' :: (b -> b) -> f a -> f a #
transformM' :: Monad m => (b -> m b) -> f a -> m (f a) #
Instances
Uniplate' (U1 :: k -> *) a # | |
(Uniplate' f b, Uniplate' g b) => Uniplate' (f :*: g :: k -> *) b # | |
Defined in Generics.Deriving.Uniplate | |
(Uniplate' f b, Uniplate' g b) => Uniplate' (f :+: g :: k -> *) b # | |
Defined in Generics.Deriving.Uniplate | |
Uniplate' (K1 i a :: k -> *) b # | |
Defined in Generics.Deriving.Uniplate | |
Uniplate a => Uniplate' (K1 i a :: k -> *) a # | |
Defined in Generics.Deriving.Uniplate | |
Uniplate' f b => Uniplate' (M1 i c f :: k -> *) b # | |
Defined in Generics.Deriving.Uniplate |