the deep analogue of $!. In the expression f $!! x, x is fully evaluated before the function f is applied to it.

Apply a transformation everywhere in bottom-up manner

Apply a transformation everywhere in top-down manner

Extend a generic query by a type-specific case

Type extension of queries for type constructors

ext2Q :: (Data d, Typeable2 t) => (d -> q) -> (forall d1 d2. (Data d1, Data d2) => t d1 d2 -> q) -> d -> q

Type extension of queries for type constructors

Make a generic query; start from a type-specific case; return a constant otherwise

Extend a generic transformation by a type-specific case

A fmap-like operator for builder primitives, both bounded and fixed size.
Builder primitives are contravariant so it's like the normal fmap, but backwards (look at the type). (If it helps to remember, the operator symbol is like ($) but backwards.)
We can use it for example to prepend and/or append fixed values to an primitive.
> showEncoding ((\x -> ('\'', (x, '\''))) >$< fixed3) 'x' = "'x'"
>
> fixed3 = char7 >*< char7 >*< char7
Note that the rather verbose syntax for composition stems from the requirement to be able to compute the size / size bound at compile time.

censor f m is an action that executes the action m and applies the function f to its output, leaving the return value unchanged.
* f m = pass (liftM (\x ->
> (x,f))

Make a generic transformation; start from a type-specific case; preserve the term otherwise

ext1T :: (Data d, Typeable1 t) => (forall e. Data e => e -> e) -> (forall f. Data f => t f -> t f) -> d -> d

Type extension of transformations for unary type constructors

ext2T :: (Data d, Typeable2 t) => (forall e. Data e => e -> e) -> (forall d1 d2. (Data d1, Data d2) => t d1 d2 -> t d1 d2) -> d -> d

Type extension of transformations for unary type constructors