| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Contents | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Description | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Data types for generic definitions (GHC only). | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Synopsis | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Typeable and types-save cast | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

class Typeable a where | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

cast :: (Typeable a, Typeable b) => a -> Maybe b | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

The type-safe cast operation | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

sameType :: (Typeable a, Typeable b) => a -> b -> Bool | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Test two entities to be of the same type | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

The Data class and related types | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

class (Typeable a) => Data a where | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

data Constr | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Transformations (T), queries (Q), monadic transformations (Q), | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

type GenericT = forall a . (Data a) => a -> a | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Instructive type synonyms | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

type GenericQ r = forall a . (Data a) => a -> r | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

type GenericM m = forall a . (Data a) => a -> m a | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

mkT :: (Typeable a, Typeable b) => (b -> b) -> a -> a | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Apply a function if appropriate or preserve term | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

mkQ :: (Typeable a, Typeable b) => r -> (b -> r) -> a -> r | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Apply a function if appropriate or return a constant | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

mkM :: (Typeable a, Typeable b, Typeable (m a), Typeable (m b), Monad m) => (b -> m b) -> a -> m a | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Apply a monadic transformation if appropriate; resort to return otherwise | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

extT :: (Typeable a, Typeable b) => (a -> a) -> (b -> b) -> a -> a | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Extend a transformation | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

extQ :: (Typeable a, Typeable b) => (a -> q) -> (b -> q) -> a -> q | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Extend a query | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

extM :: (Typeable a, Typeable b, Typeable (m a), Typeable (m b), Monad m) => (a -> m a) -> (b -> m b) -> a -> m a | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Extend a monadic transformation | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

mkTT :: (Typeable a, Typeable b, Typeable c) => (a -> a -> a) -> b -> c -> Maybe c | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Make a twin transformation Note: Should be worked on | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Traversal combinators | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

everything :: (Data a) => (r -> r -> r) -> (forall a . (Data a) => a -> r) -> a -> r | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Summarise all nodes in top-down, left-to-right | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

something :: (forall a . (Data a) => a -> Maybe u) -> forall a . (Data a) => a -> Maybe u | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Look up something by means of a recognizer | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

everywhere :: (forall a . (Data a) => a -> a) -> forall a . (Data a) => a -> a | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Apply a transformation everywhere in bottom-up manner | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

everywhereBut :: GenericQ Bool -> GenericT -> GenericT | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Variation with stop condition | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

synthesize :: (forall a . (Data a) => a -> s -> s) -> (s -> s -> s) -> s -> forall a . (Data a) => a -> s | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Bottom-up synthesis of a data structure | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

branches :: (Data a) => a -> Int | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Count immediate subterms | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

undefineds :: (Data a) => Constr -> Maybe a | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Construct term with undefined subterms | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Generic operations: equality, zip, read, show | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

geq :: forall a . (Data a) => a -> a -> Bool | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Generic equality | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

gzip :: (forall a b . (Data a, Data b) => a -> b -> Maybe b) -> forall a b . (Data a, Data b) => a -> b -> Maybe b | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Generic zip | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

gshow :: (Data a) => a -> String | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

gread :: (Data a) => String -> Maybe (a, String) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Miscellaneous | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

match :: (Typeable a, Typeable b) => (a -> Bool) -> b -> Maybe a | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Turn a predicate into a filter | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

tick :: (Typeable a, Typeable b) => (a -> Bool) -> b -> Int | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Turn a predicate into a ticker | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

count :: (Typeable a, Data b) => (a -> Bool) -> b -> Int | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Turn a ticker into a counter | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

alike :: (Typeable a, Typeable b) => (a -> Bool) -> b -> Bool | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Lift a monomorphic predicate to the polymorphic level | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Produced by Haddock version 0.4 |