
Data.Generics.Basics  Portability  nonportable  Stability  experimental  Maintainer  libraries@haskell.org 





Description 
"Scrap your boilerplate"  Generic programming in Haskell
See http://www.cs.vu.nl/boilerplate/. The present module provides
the Data class with its primitives for generic programming.


Synopsis 



Documentation 

module Data.Typeable 

The Data class for processing constructor applications 

class Typeable a => Data a where 
 Methods  gfoldl :: (forall a b . Data a => c (a > b) > a > c b) > (forall g . g > c g) > a > c a  Leftassociative fold operation for constructor applications   toConstr :: a > Constr  Obtaining the constructor from a given datum.
For proper terms, this is meant to be the toplevel constructor.
Primitive datatypes are here viewed as potentially infinite sets of
values (i.e., constructors).
  fromConstr :: Constr > a  Building a term from a constructor   dataTypeOf :: a > DataType  Provide access to list of all constructors 
  Instances  


Constructor representations 

data Constr 
Representation of constructors  Instances  


type ConIndex = Int 
Unique index for datatype constructors.
Textual order is respected. Starts at 1.


data Fixity 
Fixity of constructors  Constructors   Instances  


data DataType 
A package of constructor representations;
could be a list, an array, a balanced tree, or others.
 Instances  


Constructing constructor representations 

mkConstr :: ConIndex > String > Fixity > Constr 
Make a representation for a datatype constructor 

mkDataType :: [Constr] > DataType 
Make a package of constructor representations 

Observing constructor representations 

conString :: Constr > String 
Turn a constructor into a string 

conFixity :: Constr > Fixity 
Determine fixity of a constructor;
undefined for primitive types. 

conIndex :: Constr > ConIndex 
Determine index of a constructor.
Undefined for primitive types. 

stringCon :: DataType > String > Maybe Constr 
Lookup a constructor via a string 

indexCon :: DataType > ConIndex > Constr 
Lookup a constructor by its index; 

maxConIndex :: DataType > ConIndex 
Return maximum index;
0 for primitive types 

dataTypeCons :: DataType > [Constr] 
Return all constructors in increasing order of indicies;
empty list for primitive types 

Generic maps defined in terms of gfoldl 

gmapT :: Data a => (forall b . Data b => b > b) > a > a 
A generic transformation that maps over the immediate subterms 

gmapQ :: Data a => (forall a . Data a => a > u) > a > [u] 
A generic query that processes the immediate subterms and returns a list 

gmapQl :: Data a => (r > r' > r) > r > (forall a . Data a => a > r') > a > r 
A generic query with a leftassociative binary operator 

gmapQr :: Data a => (r' > r > r) > r > (forall a . Data a => a > r') > a > r 
A generic query with a rightassociative binary operator 

gmapM :: (Data a, Monad m) => (forall a . Data a => a > m a) > a > m a 
A generic monadic transformation that maps over the immediate subterms 

gmapMp :: (Data a, MonadPlus m) => (forall a . Data a => a > m a) > a > m a 
Transformation of at least one immediate subterm does not fail 

gmapMo :: (Data a, MonadPlus m) => (forall a . Data a => a > m a) > a > m a 
Transformation of one immediate subterm with success 

Produced by Haddock version 0.6 