uniplate-1.2.0.3: Uniform type generic traversals.ContentsIndex
Data.Generics.PlateTypeable
Contents
The Class
The Combinators
Description

This module supplies a method for writing Biplate instances more easily.

To take an example:

 data Expr = Var Int | Neg Expr | Add Expr Expr

 instance Typeable Expr where ...

 instance (Typeable a, Uniplate a) => PlateAll Expr a where
   plateAll (Var x  ) = plate Var |- x
   plateAll (Neg x  ) = plate Neg |+ x
   plateAll (Add x y) = plate Add |+ x |+ y

 instance Uniplate Expr where
   uniplate = uniplateAll
Synopsis
module Data.Generics.Biplate
module Data.Typeable
class PlateAll from to where
plateAll :: from -> Type from to
uniplateAll :: PlateAll a b => a -> (Str b, Str b -> a)
plate :: from -> Type from to
(|+) :: (Typeable item, Typeable to, PlateAll item to) => Type (item -> from) to -> item -> Type from to
(|-) :: Type (item -> from) to -> item -> Type from to
Documentation
module Data.Generics.Biplate
module Data.Typeable
The Class
class PlateAll from to where

This class represents going from the container type to the target.

This class should only be constructed with plate, |+ and |-

Methods
plateAll :: from -> Type from to
show/hide Instances
PlateAll Bool to
PlateAll Char to
PlateAll Double to
PlateAll Float to
PlateAll Int to
PlateAll Integer to
PlateAll () to
(PlateAll a to, Typeable a, PlateAll b to, Typeable b, Typeable to, Uniplate to) => PlateAll (a, b) to
(PlateAll a to, Typeable a, PlateAll b to, Typeable b, PlateAll c to, Typeable c, Typeable to, Uniplate to) => PlateAll (a, b, c) to
(PlateAll a to, Typeable a, PlateAll b to, Typeable b, PlateAll c to, Typeable c, PlateAll d to, Typeable d, Typeable to, Uniplate to) => PlateAll (a, b, c, d) to
(PlateAll a to, Typeable a, PlateAll b to, Typeable b, PlateAll c to, Typeable c, PlateAll d to, Typeable d, PlateAll e to, Typeable e, Typeable to, Uniplate to) => PlateAll (a, b, c, d, e) to
(PlateAll from to, Typeable from, Typeable to, Uniplate to) => PlateAll (Maybe from) to
(PlateAll from to, Typeable from, Typeable to, Uniplate to) => PlateAll [from] to
(PlateAll a to, Typeable a, PlateAll b to, Typeable b, Typeable to, Uniplate to) => PlateAll (Either a b) to
uniplateAll :: PlateAll a b => a -> (Str b, Str b -> a)
This function is used to write a Uniplate instance from a PlateAll one
The Combinators
plate :: from -> Type from to

The main combinator used to start the chain.

The following rule can be used for optimisation:

 plate Ctor |- x == plate (Ctor x)
(|+) :: (Typeable item, Typeable to, PlateAll item to) => Type (item -> from) to -> item -> Type from to
the field to the right may contain the target.
(|-) :: Type (item -> from) to -> item -> Type from to
The field to the right does not contain the target. This can be used as either an optimisation, or more commonly for excluding primitives such as Int.
Produced by Haddock version 0.8