Sophie

Sophie

distrib > Fedora > 15 > i386 > by-pkgid > d4d89afd994d97d86f808e6225684a4f > files > 60

ghc-uniplate-devel-1.6-5.fc15.i686.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Data.Generics.Uniplate.DataOnly</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
window.onload = function () {pageLoad();setSynopsis("mini_Data-Generics-Uniplate-DataOnly.html");};
//]]>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Data-Generics-Uniplate-DataOnly.html">Source</a></li><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">uniplate-1.6: Help writing simple, concise and fast generic operations.</p></div><div id="content"><div id="module-header"><p class="caption">Data.Generics.Uniplate.DataOnly</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">The Classes
</a></li><li><a href="#g:2">Single Type Operations
</a><ul><li><a href="#g:3">Queries
</a></li><li><a href="#g:4">Transformations
</a></li><li><a href="#g:5">Others
</a></li></ul></li><li><a href="#g:6">Multiple Type Operations
</a><ul><li><a href="#g:7">Queries
</a></li><li><a href="#g:8">Transformations
</a></li><li><a href="#g:9">Others
</a></li></ul></li></ul></div><div id="description"><p class="caption">Description</p><div class="doc"><p>This module functions identically to <a href="Data-Generics-Uniplate-Data.html">Data.Generics.Uniplate.Data</a>, but instead of
    using the standard <code><a href="Data-Generics-Uniplate-DataOnly.html#t:Uniplate">Uniplate</a></code> / <code><a href="Data-Generics-Uniplate-DataOnly.html#t:Biplate">Biplate</a></code> classes defined in
    <a href="Data-Generics-Uniplate-Operations.html">Data.Generics.Uniplate.Operations</a> it uses a local copy.
</p><p>Only use this module if you are using both <code>Data</code> and <code>Direct</code> instances in
    the same project and they are conflicting.
</p></div></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><span class="keyword">class</span>  <a href="#t:Uniplate">Uniplate</a> on  <span class="keyword">where</span><ul class="subs"><li><a href="#v:uniplate">uniplate</a> :: on -&gt; (<a href="Data-Generics-Str.html#t:Str">Str</a> on, <a href="Data-Generics-Str.html#t:Str">Str</a> on -&gt; on)</li><li><a href="#v:descend">descend</a> :: (on -&gt; on) -&gt; on -&gt; on</li><li><a href="#v:descendM">descendM</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (on -&gt; m on) -&gt; on -&gt; m on</li></ul></li><li class="src short"><span class="keyword">class</span> <a href="Data-Generics-Uniplate-DataOnly.html#t:Uniplate">Uniplate</a> to =&gt; <a href="#t:Biplate">Biplate</a> from to  <span class="keyword">where</span><ul class="subs"><li><a href="#v:biplate">biplate</a> :: from -&gt; (<a href="Data-Generics-Str.html#t:Str">Str</a> to, <a href="Data-Generics-Str.html#t:Str">Str</a> to -&gt; from)</li><li><a href="#v:descendBi">descendBi</a> :: (to -&gt; to) -&gt; from -&gt; from</li><li><a href="#v:descendBiM">descendBiM</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (to -&gt; m to) -&gt; from -&gt; m from</li></ul></li><li class="src short"><a href="#v:universe">universe</a> :: <a href="Data-Generics-Uniplate-DataOnly.html#t:Uniplate">Uniplate</a> on =&gt; on -&gt; [on]</li><li class="src short"><a href="#v:children">children</a> :: <a href="Data-Generics-Uniplate-DataOnly.html#t:Uniplate">Uniplate</a> on =&gt; on -&gt; [on]</li><li class="src short"><a href="#v:transform">transform</a> :: <a href="Data-Generics-Uniplate-DataOnly.html#t:Uniplate">Uniplate</a> on =&gt; (on -&gt; on) -&gt; on -&gt; on</li><li class="src short"><a href="#v:transformM">transformM</a> :: (<a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Monad.html#t:Monad">Monad</a> m, <a href="Data-Generics-Uniplate-DataOnly.html#t:Uniplate">Uniplate</a> on) =&gt; (on -&gt; m on) -&gt; on -&gt; m on</li><li class="src short"><a href="#v:rewrite">rewrite</a> :: <a href="Data-Generics-Uniplate-DataOnly.html#t:Uniplate">Uniplate</a> on =&gt; (on -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Maybe.html#t:Maybe">Maybe</a> on) -&gt; on -&gt; on</li><li class="src short"><a href="#v:rewriteM">rewriteM</a> :: (<a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Monad.html#t:Monad">Monad</a> m, <a href="Data-Generics-Uniplate-DataOnly.html#t:Uniplate">Uniplate</a> on) =&gt; (on -&gt; m (<a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Maybe.html#t:Maybe">Maybe</a> on)) -&gt; on -&gt; m on</li><li class="src short"><a href="#v:contexts">contexts</a> :: <a href="Data-Generics-Uniplate-DataOnly.html#t:Uniplate">Uniplate</a> on =&gt; on -&gt; [(on, on -&gt; on)]</li><li class="src short"><a href="#v:holes">holes</a> :: <a href="Data-Generics-Uniplate-DataOnly.html#t:Uniplate">Uniplate</a> on =&gt; on -&gt; [(on, on -&gt; on)]</li><li class="src short"><a href="#v:para">para</a> :: <a href="Data-Generics-Uniplate-DataOnly.html#t:Uniplate">Uniplate</a> on =&gt; (on -&gt; [r] -&gt; r) -&gt; on -&gt; r</li><li class="src short"><a href="#v:universeBi">universeBi</a> :: <a href="Data-Generics-Uniplate-DataOnly.html#t:Biplate">Biplate</a> from to =&gt; from -&gt; [to]</li><li class="src short"><a href="#v:childrenBi">childrenBi</a> :: <a href="Data-Generics-Uniplate-DataOnly.html#t:Biplate">Biplate</a> from to =&gt; from -&gt; [to]</li><li class="src short"><a href="#v:transformBi">transformBi</a> :: <a href="Data-Generics-Uniplate-DataOnly.html#t:Biplate">Biplate</a> from to =&gt; (to -&gt; to) -&gt; from -&gt; from</li><li class="src short"><a href="#v:transformBiM">transformBiM</a> :: (<a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Monad.html#t:Monad">Monad</a> m, <a href="Data-Generics-Uniplate-DataOnly.html#t:Biplate">Biplate</a> from to) =&gt; (to -&gt; m to) -&gt; from -&gt; m from</li><li class="src short"><a href="#v:rewriteBi">rewriteBi</a> :: <a href="Data-Generics-Uniplate-DataOnly.html#t:Biplate">Biplate</a> from to =&gt; (to -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Maybe.html#t:Maybe">Maybe</a> to) -&gt; from -&gt; from</li><li class="src short"><a href="#v:rewriteBiM">rewriteBiM</a> :: (<a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Monad.html#t:Monad">Monad</a> m, <a href="Data-Generics-Uniplate-DataOnly.html#t:Biplate">Biplate</a> from to) =&gt; (to -&gt; m (<a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Maybe.html#t:Maybe">Maybe</a> to)) -&gt; from -&gt; m from</li><li class="src short"><a href="#v:contextsBi">contextsBi</a> :: <a href="Data-Generics-Uniplate-DataOnly.html#t:Biplate">Biplate</a> from to =&gt; from -&gt; [(to, to -&gt; from)]</li><li class="src short"><a href="#v:holesBi">holesBi</a> :: <a href="Data-Generics-Uniplate-DataOnly.html#t:Biplate">Biplate</a> from to =&gt; from -&gt; [(to, to -&gt; from)]</li><li class="src short"><a href="#v:transformBis">transformBis</a> :: <span class="keyword">forall</span> a. <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Data.html#t:Data">Data</a> a =&gt; [[<a href="Data-Generics-Uniplate-DataOnly.html#t:Transformer">Transformer</a>]] -&gt; a -&gt; a</li><li class="src short"><span class="keyword">data</span>  <a href="#t:Transformer">Transformer</a> </li><li class="src short"><a href="#v:transformer">transformer</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Data.html#t:Data">Data</a> a =&gt; (a -&gt; a) -&gt; <a href="Data-Generics-Uniplate-DataOnly.html#t:Transformer">Transformer</a></li></ul></div><div id="interface"><h1 id="g:1">The Classes
</h1><div class="top"><p class="src"><span class="keyword">class</span>  <a name="t:Uniplate" class="def">Uniplate</a> on  <span class="keyword">where</span><a href="src/Data-Generics-Uniplate-Internal-DataOnlyOperations.html#Uniplate" class="link">Source</a></p><div class="doc"><p>The standard Uniplate class, all operations require this. All definitions must
   define <code><a href="Data-Generics-Uniplate-DataOnly.html#v:uniplate">uniplate</a></code>, while <code><a href="Data-Generics-Uniplate-DataOnly.html#v:descend">descend</a></code> and <code><a href="Data-Generics-Uniplate-DataOnly.html#v:descendM">descendM</a></code> are optional.
</p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:uniplate" class="def">uniplate</a> :: on -&gt; (<a href="Data-Generics-Str.html#t:Str">Str</a> on, <a href="Data-Generics-Str.html#t:Str">Str</a> on -&gt; on)<a href="src/Data-Generics-Uniplate-Internal-DataOnlyOperations.html#uniplate" class="link">Source</a></p><div class="doc"><p>The underlying method in the class.
   Taking a value, the function should return all the immediate children
   of the same type, and a function to replace them.
</p><p>Given <code>uniplate x = (cs, gen)</code>
</p><p><code>cs</code> should be a <code>Str on</code>, constructed of <code>Zero</code>, <code>One</code> and <code>Two</code>,
   containing all <code>x</code>'s direct children of the same type as <code>x</code>. <code>gen</code>
   should take a <code>Str on</code> with exactly the same structure as <code>cs</code>,
   and generate a new element with the children replaced.
</p><p>Example instance:
</p><pre> instance Uniplate Expr where
     uniplate (Val i  ) = (Zero               , \Zero                  -&gt; Val i  )
     uniplate (Neg a  ) = (One a              , \(One a)               -&gt; Neg a  )
     uniplate (Add a b) = (Two (One a) (One b), \(Two (One a) (One b)) -&gt; Add a b)
</pre></div><p class="src"><a name="v:descend" class="def">descend</a> :: (on -&gt; on) -&gt; on -&gt; on<a href="src/Data-Generics-Uniplate-Internal-DataOnlyOperations.html#descend" class="link">Source</a></p><div class="doc"><p>Perform a transformation on all the immediate children, then combine them back.
   This operation allows additional information to be passed downwards, and can be
   used to provide a top-down transformation. This function can be defined explicitly,
   or can be provided by automatically in terms of <code><a href="Data-Generics-Uniplate-DataOnly.html#v:uniplate">uniplate</a></code>.
</p><p>For example, on the sample type, we could write:
</p><pre> descend f (Val i  ) = Val i
 descend f (Neg a  ) = Neg (f a)
 descend f (Add a b) = Add (f a) (f b)
</pre></div><p class="src"><a name="v:descendM" class="def">descendM</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (on -&gt; m on) -&gt; on -&gt; m on<a href="src/Data-Generics-Uniplate-Internal-DataOnlyOperations.html#descendM" class="link">Source</a></p><div class="doc"><p>Monadic variant of <code><a href="Data-Generics-Uniplate-DataOnly.html#v:descend">descend</a></code>    
</p></div></div><div class="subs instances"><p id="control.i:Uniplate" class="caption collapser" onclick="toggleSection('i:Uniplate')">Instances</p><div id="section.i:Uniplate" class="show"><table><tr><td class="src"><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Data.html#t:Data">Data</a> a =&gt; <a href="Data-Generics-Uniplate-DataOnly.html#t:Uniplate">Uniplate</a> a</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">class</span> <a href="Data-Generics-Uniplate-DataOnly.html#t:Uniplate">Uniplate</a> to =&gt; <a name="t:Biplate" class="def">Biplate</a> from to  <span class="keyword">where</span><a href="src/Data-Generics-Uniplate-Internal-DataOnlyOperations.html#Biplate" class="link">Source</a></p><div class="doc"><p>Children are defined as the top-most items of type to
   <em>starting at the root</em>. All instances must define <code><a href="Data-Generics-Uniplate-DataOnly.html#v:biplate">biplate</a></code>, while
   <code><a href="Data-Generics-Uniplate-DataOnly.html#v:descendBi">descendBi</a></code> and <code><a href="Data-Generics-Uniplate-DataOnly.html#v:descendBiM">descendBiM</a></code> are optional.
</p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:biplate" class="def">biplate</a> :: from -&gt; (<a href="Data-Generics-Str.html#t:Str">Str</a> to, <a href="Data-Generics-Str.html#t:Str">Str</a> to -&gt; from)<a href="src/Data-Generics-Uniplate-Internal-DataOnlyOperations.html#biplate" class="link">Source</a></p><div class="doc"><p>Return all the top most children of type <code>to</code> within <code>from</code>.
</p><p>If <code>from == to</code> then this function should return the root as the single
   child.
</p></div><p class="src"><a name="v:descendBi" class="def">descendBi</a> :: (to -&gt; to) -&gt; from -&gt; from<a href="src/Data-Generics-Uniplate-Internal-DataOnlyOperations.html#descendBi" class="link">Source</a></p><div class="doc"><p>Like <code><a href="Data-Generics-Uniplate-DataOnly.html#v:descend">descend</a></code> but with more general types. If <code>from == to</code> then this
   function <em>does not</em> descend. Therefore, when writing definitions it is
   highly unlikely that this function should be used in the recursive case.
   A common pattern is to first match the types using <code><a href="Data-Generics-Uniplate-DataOnly.html#v:descendBi">descendBi</a></code>, then continue
   the recursion with <code><a href="Data-Generics-Uniplate-DataOnly.html#v:descend">descend</a></code>.
</p></div><p class="src"><a name="v:descendBiM" class="def">descendBiM</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; (to -&gt; m to) -&gt; from -&gt; m from<a href="src/Data-Generics-Uniplate-Internal-DataOnlyOperations.html#descendBiM" class="link">Source</a></p></div><div class="subs instances"><p id="control.i:Biplate" class="caption collapser" onclick="toggleSection('i:Biplate')">Instances</p><div id="section.i:Biplate" class="show"><table><tr><td class="src">(<a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Data.html#t:Data">Data</a> a, <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Data.html#t:Data">Data</a> b, <a href="Data-Generics-Uniplate-DataOnly.html#t:Uniplate">Uniplate</a> b) =&gt; <a href="Data-Generics-Uniplate-DataOnly.html#t:Biplate">Biplate</a> a b</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><h1 id="g:2">Single Type Operations
</h1><h2 id="g:3">Queries
</h2><div class="top"><p class="src"><a name="v:universe" class="def">universe</a> :: <a href="Data-Generics-Uniplate-DataOnly.html#t:Uniplate">Uniplate</a> on =&gt; on -&gt; [on]<a href="src/Data-Generics-Uniplate-Internal-DataOnlyOperations.html#universe" class="link">Source</a></p><div class="doc"><p>Get all the children of a node, including itself and all children.
</p><pre> universe (Add (Val 1) (Neg (Val 2))) =
     [Add (Val 1) (Neg (Val 2)), Val 1, Neg (Val 2), Val 2]
</pre><p>This method is often combined with a list comprehension, for example:
</p><pre> vals x = [i | Val i &lt;- universe x]
</pre></div></div><div class="top"><p class="src"><a name="v:children" class="def">children</a> :: <a href="Data-Generics-Uniplate-DataOnly.html#t:Uniplate">Uniplate</a> on =&gt; on -&gt; [on]<a href="src/Data-Generics-Uniplate-Internal-DataOnlyOperations.html#children" class="link">Source</a></p><div class="doc"><p>Get the direct children of a node. Usually using <code><a href="Data-Generics-Uniplate-DataOnly.html#v:universe">universe</a></code> is more appropriate.
</p></div></div><h2 id="g:4">Transformations
</h2><div class="top"><p class="src"><a name="v:transform" class="def">transform</a> :: <a href="Data-Generics-Uniplate-DataOnly.html#t:Uniplate">Uniplate</a> on =&gt; (on -&gt; on) -&gt; on -&gt; on<a href="src/Data-Generics-Uniplate-Internal-DataOnlyOperations.html#transform" class="link">Source</a></p><div class="doc"><p>Transform every element in the tree, in a bottom-up manner.
</p><p>For example, replacing negative literals with literals:
</p><pre> negLits = transform f
    where f (Neg (Lit i)) = Lit (negate i)
          f x = x
</pre></div></div><div class="top"><p class="src"><a name="v:transformM" class="def">transformM</a> :: (<a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Monad.html#t:Monad">Monad</a> m, <a href="Data-Generics-Uniplate-DataOnly.html#t:Uniplate">Uniplate</a> on) =&gt; (on -&gt; m on) -&gt; on -&gt; m on<a href="src/Data-Generics-Uniplate-Internal-DataOnlyOperations.html#transformM" class="link">Source</a></p><div class="doc"><p>Monadic variant of <code><a href="Data-Generics-Uniplate-DataOnly.html#v:transform">transform</a></code>
</p></div></div><div class="top"><p class="src"><a name="v:rewrite" class="def">rewrite</a> :: <a href="Data-Generics-Uniplate-DataOnly.html#t:Uniplate">Uniplate</a> on =&gt; (on -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Maybe.html#t:Maybe">Maybe</a> on) -&gt; on -&gt; on<a href="src/Data-Generics-Uniplate-Internal-DataOnlyOperations.html#rewrite" class="link">Source</a></p><div class="doc"><p>Rewrite by applying a rule everywhere you can. Ensures that the rule cannot
 be applied anywhere in the result:
</p><pre> propRewrite r x = all (isNothing . r) (universe (rewrite r x))
</pre><p>Usually <code><a href="Data-Generics-Uniplate-DataOnly.html#v:transform">transform</a></code> is more appropriate, but <code><a href="Data-Generics-Uniplate-DataOnly.html#v:rewrite">rewrite</a></code> can give better
 compositionality. Given two single transformations <code>f</code> and <code>g</code>, you can
 construct <code>f <code>mplus</code> g</code> which performs both rewrites until a fixed point.
</p></div></div><div class="top"><p class="src"><a name="v:rewriteM" class="def">rewriteM</a> :: (<a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Monad.html#t:Monad">Monad</a> m, <a href="Data-Generics-Uniplate-DataOnly.html#t:Uniplate">Uniplate</a> on) =&gt; (on -&gt; m (<a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Maybe.html#t:Maybe">Maybe</a> on)) -&gt; on -&gt; m on<a href="src/Data-Generics-Uniplate-Internal-DataOnlyOperations.html#rewriteM" class="link">Source</a></p><div class="doc"><p>Monadic variant of <code><a href="Data-Generics-Uniplate-DataOnly.html#v:rewrite">rewrite</a></code>
</p></div></div><h2 id="g:5">Others
</h2><div class="top"><p class="src"><a name="v:contexts" class="def">contexts</a> :: <a href="Data-Generics-Uniplate-DataOnly.html#t:Uniplate">Uniplate</a> on =&gt; on -&gt; [(on, on -&gt; on)]<a href="src/Data-Generics-Uniplate-Internal-DataOnlyOperations.html#contexts" class="link">Source</a></p><div class="doc"><p>Return all the contexts and holes.
</p><pre> universe x == map fst (contexts x)
 all (== x) [b a | (a,b) &lt;- contexts x]
</pre></div></div><div class="top"><p class="src"><a name="v:holes" class="def">holes</a> :: <a href="Data-Generics-Uniplate-DataOnly.html#t:Uniplate">Uniplate</a> on =&gt; on -&gt; [(on, on -&gt; on)]<a href="src/Data-Generics-Uniplate-Internal-DataOnlyOperations.html#holes" class="link">Source</a></p><div class="doc"><p>The one depth version of <code><a href="Data-Generics-Uniplate-DataOnly.html#v:contexts">contexts</a></code>
</p><pre> children x == map fst (holes x)
 all (== x) [b a | (a,b) &lt;- holes x]
</pre></div></div><div class="top"><p class="src"><a name="v:para" class="def">para</a> :: <a href="Data-Generics-Uniplate-DataOnly.html#t:Uniplate">Uniplate</a> on =&gt; (on -&gt; [r] -&gt; r) -&gt; on -&gt; r<a href="src/Data-Generics-Uniplate-Internal-DataOnlyOperations.html#para" class="link">Source</a></p><div class="doc"><p>Perform a fold-like computation on each value,
   technically a paramorphism
</p></div></div><h1 id="g:6">Multiple Type Operations
</h1><h2 id="g:7">Queries
</h2><div class="top"><p class="src"><a name="v:universeBi" class="def">universeBi</a> :: <a href="Data-Generics-Uniplate-DataOnly.html#t:Biplate">Biplate</a> from to =&gt; from -&gt; [to]<a href="src/Data-Generics-Uniplate-Internal-DataOnlyOperations.html#universeBi" class="link">Source</a></p></div><div class="top"><p class="src"><a name="v:childrenBi" class="def">childrenBi</a> :: <a href="Data-Generics-Uniplate-DataOnly.html#t:Biplate">Biplate</a> from to =&gt; from -&gt; [to]<a href="src/Data-Generics-Uniplate-Internal-DataOnlyOperations.html#childrenBi" class="link">Source</a></p><div class="doc"><p>Return the children of a type. If <code>to == from</code> then it returns the
 original element (in contrast to <code><a href="Data-Generics-Uniplate-DataOnly.html#v:children">children</a></code>)
</p></div></div><h2 id="g:8">Transformations
</h2><div class="top"><p class="src"><a name="v:transformBi" class="def">transformBi</a> :: <a href="Data-Generics-Uniplate-DataOnly.html#t:Biplate">Biplate</a> from to =&gt; (to -&gt; to) -&gt; from -&gt; from<a href="src/Data-Generics-Uniplate-Internal-DataOnlyOperations.html#transformBi" class="link">Source</a></p></div><div class="top"><p class="src"><a name="v:transformBiM" class="def">transformBiM</a> :: (<a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Monad.html#t:Monad">Monad</a> m, <a href="Data-Generics-Uniplate-DataOnly.html#t:Biplate">Biplate</a> from to) =&gt; (to -&gt; m to) -&gt; from -&gt; m from<a href="src/Data-Generics-Uniplate-Internal-DataOnlyOperations.html#transformBiM" class="link">Source</a></p></div><div class="top"><p class="src"><a name="v:rewriteBi" class="def">rewriteBi</a> :: <a href="Data-Generics-Uniplate-DataOnly.html#t:Biplate">Biplate</a> from to =&gt; (to -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Maybe.html#t:Maybe">Maybe</a> to) -&gt; from -&gt; from<a href="src/Data-Generics-Uniplate-Internal-DataOnlyOperations.html#rewriteBi" class="link">Source</a></p></div><div class="top"><p class="src"><a name="v:rewriteBiM" class="def">rewriteBiM</a> :: (<a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Control-Monad.html#t:Monad">Monad</a> m, <a href="Data-Generics-Uniplate-DataOnly.html#t:Biplate">Biplate</a> from to) =&gt; (to -&gt; m (<a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Maybe.html#t:Maybe">Maybe</a> to)) -&gt; from -&gt; m from<a href="src/Data-Generics-Uniplate-Internal-DataOnlyOperations.html#rewriteBiM" class="link">Source</a></p></div><h2 id="g:9">Others
</h2><div class="top"><p class="src"><a name="v:contextsBi" class="def">contextsBi</a> :: <a href="Data-Generics-Uniplate-DataOnly.html#t:Biplate">Biplate</a> from to =&gt; from -&gt; [(to, to -&gt; from)]<a href="src/Data-Generics-Uniplate-Internal-DataOnlyOperations.html#contextsBi" class="link">Source</a></p></div><div class="top"><p class="src"><a name="v:holesBi" class="def">holesBi</a> :: <a href="Data-Generics-Uniplate-DataOnly.html#t:Biplate">Biplate</a> from to =&gt; from -&gt; [(to, to -&gt; from)]<a href="src/Data-Generics-Uniplate-Internal-DataOnlyOperations.html#holesBi" class="link">Source</a></p></div><div class="top"><p class="src"><a name="v:transformBis" class="def">transformBis</a> :: <span class="keyword">forall</span> a. <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Data.html#t:Data">Data</a> a =&gt; [[<a href="Data-Generics-Uniplate-DataOnly.html#t:Transformer">Transformer</a>]] -&gt; a -&gt; a<a href="src/Data-Generics-Uniplate-Internal-Data.html#transformBis" class="link">Source</a></p><div class="doc"><p>Apply a sequence of transformations in order. This function obeys the equivalence:
</p><pre> transformBis [[transformer f],[transformer g],...] == transformBi f . transformBi g . ...
</pre><p>Each item of type <code>[Transformer]</code> is applied in turn, right to left. Within each
   <code>[Transformer]</code>, the individual <code>Transformer</code> values may be interleaved.
</p><p>The implementation will attempt to perform fusion, and avoid walking any part of the
   data structure more than necessary. To further improve performance, you may wish to
   partially apply the first argument, which will calculate information about the relationship
   between the transformations.
</p></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:Transformer" class="def">Transformer</a>  <a href="src/Data-Generics-Uniplate-Internal-Data.html#Transformer" class="link">Source</a></p></div><div class="top"><p class="src"><a name="v:transformer" class="def">transformer</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Data.html#t:Data">Data</a> a =&gt; (a -&gt; a) -&gt; <a href="Data-Generics-Uniplate-DataOnly.html#t:Transformer">Transformer</a><a href="src/Data-Generics-Uniplate-Internal-Data.html#transformer" class="link">Source</a></p><div class="doc"><p>Wrap up a <code>(a -&gt; a)</code> transformation function, to use with <code><a href="Data-Generics-Uniplate-DataOnly.html#v:transformBis">transformBis</a></code>
</p></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.9.2</p></div></body></html>