<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!--Rendered using the Haskell Html Library v0.2--> <HTML ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE >Data.Generics.Twins</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ><SCRIPT SRC="haddock-util.js" TYPE="text/javascript" ></SCRIPT ><SCRIPT TYPE="text/javascript" >window.onload = function () {setSynopsis("mini_Data-Generics-Twins.html")};</SCRIPT ></HEAD ><BODY ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="topbar" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title" >syb-0.1.0.1: Scrap Your Boilerplate</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A ></TD ><TD CLASS="topbut" ><A HREF="doc-index.html" >Index</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="modulebar" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD ><FONT SIZE="6" >Data.Generics.Twins</FONT ></TD ><TD ALIGN="right" ><TABLE CLASS="narrow" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="infohead" >Portability</TD ><TD CLASS="infoval" >non-portable (local universal quantification)</TD ></TR ><TR ><TD CLASS="infohead" >Stability</TD ><TD CLASS="infoval" >experimental</TD ></TR ><TR ><TD CLASS="infohead" >Maintainer</TD ><TD CLASS="infoval" >generics@haskell.org</TD ></TR ></TABLE ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="section4" ><B >Contents</B ></TD ></TR ><TR ><TD ><DL ><DT ><A HREF="#1" >Generic folds and maps that also accumulate </A ></DT ><DT ><A HREF="#2" >Mapping combinators for twin traversal </A ></DT ><DT ><A HREF="#3" >Typical twin traversals </A ></DT ></DL ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" >Description</TD ></TR ><TR ><TD CLASS="doc" >"Scrap your boilerplate" --- Generic programming in Haskell See <A HREF="http://www.cs.vu.nl/boilerplate/" >http://www.cs.vu.nl/boilerplate/</A >. The present module provides support for multi-parameter traversal, which is also demonstrated with generic operations like equality. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" >Synopsis</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="decl" ><A HREF="#v%3AgfoldlAccum" >gfoldlAccum</A > :: <A HREF="../base/Data-Data.html#t%3AData" >Data</A > d => (<SPAN CLASS="keyword" >forall</SPAN > e r. <A HREF="../base/Data-Data.html#t%3AData" >Data</A > e => a -> c (e -> r) -> e -> (a, c r)) -> (<SPAN CLASS="keyword" >forall</SPAN > g. a -> g -> (a, c g)) -> a -> d -> (a, c d)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AgmapAccumT" >gmapAccumT</A > :: <A HREF="../base/Data-Data.html#t%3AData" >Data</A > d => (<SPAN CLASS="keyword" >forall</SPAN > e. <A HREF="../base/Data-Data.html#t%3AData" >Data</A > e => a -> e -> (a, e)) -> a -> d -> (a, d)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AgmapAccumM" >gmapAccumM</A > :: (<A HREF="../base/Data-Data.html#t%3AData" >Data</A > d, <A HREF="../base/Control-Monad.html#t%3AMonad" >Monad</A > m) => (<SPAN CLASS="keyword" >forall</SPAN > e. <A HREF="../base/Data-Data.html#t%3AData" >Data</A > e => a -> e -> (a, m e)) -> a -> d -> (a, m d)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AgmapAccumQl" >gmapAccumQl</A > :: <A HREF="../base/Data-Data.html#t%3AData" >Data</A > d => (r -> r' -> r) -> r -> (<SPAN CLASS="keyword" >forall</SPAN > e. <A HREF="../base/Data-Data.html#t%3AData" >Data</A > e => a -> e -> (a, r')) -> a -> d -> (a, r)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AgmapAccumQr" >gmapAccumQr</A > :: <A HREF="../base/Data-Data.html#t%3AData" >Data</A > d => (r' -> r -> r) -> r -> (<SPAN CLASS="keyword" >forall</SPAN > e. <A HREF="../base/Data-Data.html#t%3AData" >Data</A > e => a -> e -> (a, r')) -> a -> d -> (a, r)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AgmapAccumQ" >gmapAccumQ</A > :: <A HREF="../base/Data-Data.html#t%3AData" >Data</A > d => (<SPAN CLASS="keyword" >forall</SPAN > e. <A HREF="../base/Data-Data.html#t%3AData" >Data</A > e => a -> e -> (a, q)) -> a -> d -> (a, [q])</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AgzipWithT" >gzipWithT</A > :: <A HREF="Data-Generics-Aliases.html#t%3AGenericQ" >GenericQ</A > <A HREF="Data-Generics-Aliases.html#t%3AGenericT" >GenericT</A > -> <A HREF="Data-Generics-Aliases.html#t%3AGenericQ" >GenericQ</A > <A HREF="Data-Generics-Aliases.html#t%3AGenericT" >GenericT</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AgzipWithM" >gzipWithM</A > :: <A HREF="../base/Control-Monad.html#t%3AMonad" >Monad</A > m => <A HREF="Data-Generics-Aliases.html#t%3AGenericQ" >GenericQ</A > (<A HREF="Data-Generics-Aliases.html#t%3AGenericM" >GenericM</A > m) -> <A HREF="Data-Generics-Aliases.html#t%3AGenericQ" >GenericQ</A > (<A HREF="Data-Generics-Aliases.html#t%3AGenericM" >GenericM</A > m)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AgzipWithQ" >gzipWithQ</A > :: <A HREF="Data-Generics-Aliases.html#t%3AGenericQ" >GenericQ</A > (<A HREF="Data-Generics-Aliases.html#t%3AGenericQ" >GenericQ</A > r) -> <A HREF="Data-Generics-Aliases.html#t%3AGenericQ" >GenericQ</A > (<A HREF="Data-Generics-Aliases.html#t%3AGenericQ" >GenericQ</A > [r])</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3Ageq" >geq</A > :: <A HREF="../base/Data-Data.html#t%3AData" >Data</A > a => a -> a -> <A HREF="../ghc-prim/GHC-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3Agzip" >gzip</A > :: <A HREF="Data-Generics-Aliases.html#t%3AGenericQ" >GenericQ</A > (<A HREF="Data-Generics-Aliases.html#t%3AGenericM" >GenericM</A > <A HREF="../base/Data-Maybe.html#t%3AMaybe" >Maybe</A >) -> <A HREF="Data-Generics-Aliases.html#t%3AGenericQ" >GenericQ</A > (<A HREF="Data-Generics-Aliases.html#t%3AGenericM" >GenericM</A > <A HREF="../base/Data-Maybe.html#t%3AMaybe" >Maybe</A >)</TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="1" ><A NAME="1" >Generic folds and maps that also accumulate </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:gfoldlAccum" ><A NAME="v%3AgfoldlAccum" ></A ></A ><B >gfoldlAccum</B > :: <A HREF="../base/Data-Data.html#t%3AData" >Data</A > d => (<SPAN CLASS="keyword" >forall</SPAN > e r. <A HREF="../base/Data-Data.html#t%3AData" >Data</A > e => a -> c (e -> r) -> e -> (a, c r)) -> (<SPAN CLASS="keyword" >forall</SPAN > g. a -> g -> (a, c g)) -> a -> d -> (a, c d)</TD ></TR ><TR ><TD CLASS="doc" >gfoldl with accumulation </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:gmapAccumT" ><A NAME="v%3AgmapAccumT" ></A ></A ><B >gmapAccumT</B > :: <A HREF="../base/Data-Data.html#t%3AData" >Data</A > d => (<SPAN CLASS="keyword" >forall</SPAN > e. <A HREF="../base/Data-Data.html#t%3AData" >Data</A > e => a -> e -> (a, e)) -> a -> d -> (a, d)</TD ></TR ><TR ><TD CLASS="doc" >gmapT with accumulation </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:gmapAccumM" ><A NAME="v%3AgmapAccumM" ></A ></A ><B >gmapAccumM</B > :: (<A HREF="../base/Data-Data.html#t%3AData" >Data</A > d, <A HREF="../base/Control-Monad.html#t%3AMonad" >Monad</A > m) => (<SPAN CLASS="keyword" >forall</SPAN > e. <A HREF="../base/Data-Data.html#t%3AData" >Data</A > e => a -> e -> (a, m e)) -> a -> d -> (a, m d)</TD ></TR ><TR ><TD CLASS="doc" >gmapM with accumulation </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:gmapAccumQl" ><A NAME="v%3AgmapAccumQl" ></A ></A ><B >gmapAccumQl</B > :: <A HREF="../base/Data-Data.html#t%3AData" >Data</A > d => (r -> r' -> r) -> r -> (<SPAN CLASS="keyword" >forall</SPAN > e. <A HREF="../base/Data-Data.html#t%3AData" >Data</A > e => a -> e -> (a, r')) -> a -> d -> (a, r)</TD ></TR ><TR ><TD CLASS="doc" >gmapQl with accumulation </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:gmapAccumQr" ><A NAME="v%3AgmapAccumQr" ></A ></A ><B >gmapAccumQr</B > :: <A HREF="../base/Data-Data.html#t%3AData" >Data</A > d => (r' -> r -> r) -> r -> (<SPAN CLASS="keyword" >forall</SPAN > e. <A HREF="../base/Data-Data.html#t%3AData" >Data</A > e => a -> e -> (a, r')) -> a -> d -> (a, r)</TD ></TR ><TR ><TD CLASS="doc" >gmapQr with accumulation </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:gmapAccumQ" ><A NAME="v%3AgmapAccumQ" ></A ></A ><B >gmapAccumQ</B > :: <A HREF="../base/Data-Data.html#t%3AData" >Data</A > d => (<SPAN CLASS="keyword" >forall</SPAN > e. <A HREF="../base/Data-Data.html#t%3AData" >Data</A > e => a -> e -> (a, q)) -> a -> d -> (a, [q])</TD ></TR ><TR ><TD CLASS="doc" >gmapQ with accumulation </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="2" ><A NAME="2" >Mapping combinators for twin traversal </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:gzipWithT" ><A NAME="v%3AgzipWithT" ></A ></A ><B >gzipWithT</B > :: <A HREF="Data-Generics-Aliases.html#t%3AGenericQ" >GenericQ</A > <A HREF="Data-Generics-Aliases.html#t%3AGenericT" >GenericT</A > -> <A HREF="Data-Generics-Aliases.html#t%3AGenericQ" >GenericQ</A > <A HREF="Data-Generics-Aliases.html#t%3AGenericT" >GenericT</A ></TD ></TR ><TR ><TD CLASS="doc" >Twin map for transformation </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:gzipWithM" ><A NAME="v%3AgzipWithM" ></A ></A ><B >gzipWithM</B > :: <A HREF="../base/Control-Monad.html#t%3AMonad" >Monad</A > m => <A HREF="Data-Generics-Aliases.html#t%3AGenericQ" >GenericQ</A > (<A HREF="Data-Generics-Aliases.html#t%3AGenericM" >GenericM</A > m) -> <A HREF="Data-Generics-Aliases.html#t%3AGenericQ" >GenericQ</A > (<A HREF="Data-Generics-Aliases.html#t%3AGenericM" >GenericM</A > m)</TD ></TR ><TR ><TD CLASS="doc" >Twin map for monadic transformation </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:gzipWithQ" ><A NAME="v%3AgzipWithQ" ></A ></A ><B >gzipWithQ</B > :: <A HREF="Data-Generics-Aliases.html#t%3AGenericQ" >GenericQ</A > (<A HREF="Data-Generics-Aliases.html#t%3AGenericQ" >GenericQ</A > r) -> <A HREF="Data-Generics-Aliases.html#t%3AGenericQ" >GenericQ</A > (<A HREF="Data-Generics-Aliases.html#t%3AGenericQ" >GenericQ</A > [r])</TD ></TR ><TR ><TD CLASS="doc" >Twin map for queries </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="3" ><A NAME="3" >Typical twin traversals </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:geq" ><A NAME="v%3Ageq" ></A ></A ><B >geq</B > :: <A HREF="../base/Data-Data.html#t%3AData" >Data</A > a => a -> a -> <A HREF="../ghc-prim/GHC-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="doc" >Generic equality: an alternative to "deriving Eq" </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:gzip" ><A NAME="v%3Agzip" ></A ></A ><B >gzip</B > :: <A HREF="Data-Generics-Aliases.html#t%3AGenericQ" >GenericQ</A > (<A HREF="Data-Generics-Aliases.html#t%3AGenericM" >GenericM</A > <A HREF="../base/Data-Maybe.html#t%3AMaybe" >Maybe</A >) -> <A HREF="Data-Generics-Aliases.html#t%3AGenericQ" >GenericQ</A > (<A HREF="Data-Generics-Aliases.html#t%3AGenericM" >GenericM</A > <A HREF="../base/Data-Maybe.html#t%3AMaybe" >Maybe</A >)</TD ></TR ><TR ><TD CLASS="doc" >Generic zip controlled by a function with type-specific branches </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="botbar" >Produced by <A HREF="http://www.haskell.org/haddock/" >Haddock</A > version 2.4.2</TD ></TR ></TABLE ></BODY ></HTML >