Sophie

Sophie

distrib > Fedora > 15 > i386 > by-pkgid > 76b64d6b9f75896964ec7bb7315fe842 > files > 13

ghc-split-devel-0.1.3-4.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.List.Split.Internals</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-List-Split-Internals.html");};
//]]>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Data-List-Split-Internals.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">split-0.1.3: Combinator library for splitting lists.</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Portability</th><td>unportable (GADTs, Rank2Types)</td></tr><tr><th>Stability</th><td>experimental</td></tr><tr><th>Maintainer</th><td>byorgey@gmail.com</td></tr></table><p class="caption">Data.List.Split.Internals</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">Types and utilities
</a></li><li><a href="#g:2">Implementation
</a></li><li><a href="#g:3">Combinators
</a><ul><li><a href="#g:4">Basic strategies
</a></li><li><a href="#g:5">Strategy transformers
</a></li><li><a href="#g:6">Derived combinators
</a></li><li><a href="#g:7">Convenience functions
</a></li></ul></li><li><a href="#g:8">Other splitting methods
</a></li></ul></div><div id="description"><p class="caption">Description</p><div class="doc"><p>Implementation module for <a href="Data-List-Split.html">Data.List.Split</a>, a combinator library
 for splitting lists.  See the <a href="Data-List-Split.html">Data.List.Split</a> documentation for
 more description and examples.
</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">data</span>  <a href="#t:Splitter">Splitter</a> a = <a href="#v:Splitter">Splitter</a> {<ul class="subs"><li><a href="#v:delimiter">delimiter</a> :: <a href="Data-List-Split-Internals.html#t:Delimiter">Delimiter</a> a</li><li><a href="#v:delimPolicy">delimPolicy</a> :: <a href="Data-List-Split-Internals.html#t:DelimPolicy">DelimPolicy</a></li><li><a href="#v:condensePolicy">condensePolicy</a> :: <a href="Data-List-Split-Internals.html#t:CondensePolicy">CondensePolicy</a></li><li><a href="#v:initBlankPolicy">initBlankPolicy</a> :: <a href="Data-List-Split-Internals.html#t:EndPolicy">EndPolicy</a></li><li><a href="#v:finalBlankPolicy">finalBlankPolicy</a> :: <a href="Data-List-Split-Internals.html#t:EndPolicy">EndPolicy</a></li></ul>}</li><li class="src short"><a href="#v:defaultSplitter">defaultSplitter</a> ::  <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a</li><li class="src short"><span class="keyword">data</span>  <a href="#t:Delimiter">Delimiter</a> a <span class="keyword">where</span><ul class="subs"><li><a href="#v:DelimEltPred">DelimEltPred</a> ::  (a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; <a href="Data-List-Split-Internals.html#t:Delimiter">Delimiter</a> a  </li><li><a href="#v:DelimSublist">DelimSublist</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; <a href="Data-List-Split-Internals.html#t:Delimiter">Delimiter</a> a  </li></ul></li><li class="src short"><a href="#v:matchDelim">matchDelim</a> ::  <a href="Data-List-Split-Internals.html#t:Delimiter">Delimiter</a> a -&gt; [a] -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Maybe.html#t:Maybe">Maybe</a> ([a], [a])</li><li class="src short"><span class="keyword">data</span>  <a href="#t:DelimPolicy">DelimPolicy</a> <ul class="subs"><li>= <a href="#v:Drop">Drop</a>  </li><li>| <a href="#v:Keep">Keep</a>  </li><li>| <a href="#v:KeepLeft">KeepLeft</a>  </li><li>| <a href="#v:KeepRight">KeepRight</a>  </li></ul></li><li class="src short"><span class="keyword">data</span>  <a href="#t:CondensePolicy">CondensePolicy</a> <ul class="subs"><li>= <a href="#v:Condense">Condense</a>  </li><li>| <a href="#v:KeepBlankFields">KeepBlankFields</a>  </li></ul></li><li class="src short"><span class="keyword">data</span>  <a href="#t:EndPolicy">EndPolicy</a> <ul class="subs"><li>= <a href="#v:DropBlank">DropBlank</a>  </li><li>| <a href="#v:KeepBlank">KeepBlank</a>  </li></ul></li><li class="src short"><span class="keyword">data</span>  <a href="#t:Chunk">Chunk</a> a<ul class="subs"><li>= <a href="#v:Delim">Delim</a> [a]  </li><li>| <a href="#v:Text">Text</a> [a]  </li></ul></li><li class="src short"><span class="keyword">type</span> <a href="#t:SplitList">SplitList</a> a = [<a href="Data-List-Split-Internals.html#t:Chunk">Chunk</a> a]</li><li class="src short"><a href="#v:fromElem">fromElem</a> ::  <a href="Data-List-Split-Internals.html#t:Chunk">Chunk</a> a -&gt; [a]</li><li class="src short"><a href="#v:isDelim">isDelim</a> ::  <a href="Data-List-Split-Internals.html#t:Chunk">Chunk</a> a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isText">isText</a> ::  <a href="Data-List-Split-Internals.html#t:Chunk">Chunk</a> a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:build">build</a> ::  (<span class="keyword">forall</span> b.  (a -&gt; b -&gt; b) -&gt; b -&gt; b) -&gt; [a]</li><li class="src short"><a href="#v:splitInternal">splitInternal</a> ::  <a href="Data-List-Split-Internals.html#t:Delimiter">Delimiter</a> a -&gt; [a] -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a</li><li class="src short"><a href="#v:breakDelim">breakDelim</a> ::  <a href="Data-List-Split-Internals.html#t:Delimiter">Delimiter</a> a -&gt; [a] -&gt; ([a], <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Maybe.html#t:Maybe">Maybe</a> ([a], [a]))</li><li class="src short"><a href="#v:matchSublist">matchSublist</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; [a] -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Maybe.html#t:Maybe">Maybe</a> [a]</li><li class="src short"><a href="#v:postProcess">postProcess</a> ::  <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a</li><li class="src short"><a href="#v:doDrop">doDrop</a> ::  <a href="Data-List-Split-Internals.html#t:DelimPolicy">DelimPolicy</a> -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a</li><li class="src short"><a href="#v:doCondense">doCondense</a> ::  <a href="Data-List-Split-Internals.html#t:CondensePolicy">CondensePolicy</a> -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a</li><li class="src short"><a href="#v:insertBlanks">insertBlanks</a> ::  <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a</li><li class="src short"><a href="#v:insertBlanks-39-">insertBlanks'</a> ::  <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a</li><li class="src short"><a href="#v:doMerge">doMerge</a> ::  <a href="Data-List-Split-Internals.html#t:DelimPolicy">DelimPolicy</a> -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a</li><li class="src short"><a href="#v:mergeLeft">mergeLeft</a> ::  <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a</li><li class="src short"><a href="#v:mergeRight">mergeRight</a> ::  <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a</li><li class="src short"><a href="#v:dropInitial">dropInitial</a> ::  <a href="Data-List-Split-Internals.html#t:EndPolicy">EndPolicy</a> -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a</li><li class="src short"><a href="#v:dropFinal">dropFinal</a> ::  <a href="Data-List-Split-Internals.html#t:EndPolicy">EndPolicy</a> -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a</li><li class="src short"><a href="#v:split">split</a> ::  <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a -&gt; [a] -&gt; [[a]]</li><li class="src short"><a href="#v:oneOf">oneOf</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a</li><li class="src short"><a href="#v:onSublist">onSublist</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a</li><li class="src short"><a href="#v:whenElt">whenElt</a> ::  (a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a</li><li class="src short"><a href="#v:dropDelims">dropDelims</a> ::  <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a -&gt; <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a</li><li class="src short"><a href="#v:keepDelimsL">keepDelimsL</a> ::  <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a -&gt; <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a</li><li class="src short"><a href="#v:keepDelimsR">keepDelimsR</a> ::  <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a -&gt; <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a</li><li class="src short"><a href="#v:condense">condense</a> ::  <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a -&gt; <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a</li><li class="src short"><a href="#v:dropInitBlank">dropInitBlank</a> ::  <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a -&gt; <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a</li><li class="src short"><a href="#v:dropFinalBlank">dropFinalBlank</a> ::  <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a -&gt; <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a</li><li class="src short"><a href="#v:dropBlanks">dropBlanks</a> ::  <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a -&gt; <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a</li><li class="src short"><a href="#v:startsWith">startsWith</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a</li><li class="src short"><a href="#v:startsWithOneOf">startsWithOneOf</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a</li><li class="src short"><a href="#v:endsWith">endsWith</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a</li><li class="src short"><a href="#v:endsWithOneOf">endsWithOneOf</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a</li><li class="src short"><a href="#v:splitOneOf">splitOneOf</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; [a] -&gt; [[a]]</li><li class="src short"><a href="#v:splitOn">splitOn</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; [a] -&gt; [[a]]</li><li class="src short"><a href="#v:splitWhen">splitWhen</a> ::  (a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; [a] -&gt; [[a]]</li><li class="src short"><a href="#v:sepBy">sepBy</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; [a] -&gt; [[a]]</li><li class="src short"><a href="#v:sepByOneOf">sepByOneOf</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; [a] -&gt; [[a]]</li><li class="src short"><a href="#v:endBy">endBy</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; [a] -&gt; [[a]]</li><li class="src short"><a href="#v:endByOneOf">endByOneOf</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; [a] -&gt; [[a]]</li><li class="src short"><a href="#v:unintercalate">unintercalate</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; [a] -&gt; [[a]]</li><li class="src short"><a href="#v:wordsBy">wordsBy</a> ::  (a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; [a] -&gt; [[a]]</li><li class="src short"><a href="#v:linesBy">linesBy</a> ::  (a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; [a] -&gt; [[a]]</li><li class="src short"><a href="#v:splitEvery">splitEvery</a> ::  <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Int.html#t:Int">Int</a> -&gt; [e] -&gt; [[e]]</li><li class="src short"><a href="#v:chunk">chunk</a> ::  <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Int.html#t:Int">Int</a> -&gt; [e] -&gt; [[e]]</li><li class="src short"><a href="#v:splitPlaces">splitPlaces</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Prelude.html#t:Integral">Integral</a> a =&gt; [a] -&gt; [e] -&gt; [[e]]</li><li class="src short"><a href="#v:chop">chop</a> ::  ([a] -&gt; (b, [a])) -&gt; [a] -&gt; [b]</li></ul></div><div id="interface"><h1 id="g:1">Types and utilities
</h1><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:Splitter" class="def">Splitter</a> a <a href="src/Data-List-Split-Internals.html#Splitter" class="link">Source</a></p><div class="doc"><p>A splitting strategy.
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Splitter" class="def">Splitter</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:delimiter" class="def">delimiter</a> :: <a href="Data-List-Split-Internals.html#t:Delimiter">Delimiter</a> a</dt><dd class="doc"><p>What delimiter to split on
</p></dd><dt class="src"><a name="v:delimPolicy" class="def">delimPolicy</a> :: <a href="Data-List-Split-Internals.html#t:DelimPolicy">DelimPolicy</a></dt><dd class="doc"><p>What to do with delimiters (drop
   from output, keep as separate
   elements in output, or merge with
   previous or following chunks)
</p></dd><dt class="src"><a name="v:condensePolicy" class="def">condensePolicy</a> :: <a href="Data-List-Split-Internals.html#t:CondensePolicy">CondensePolicy</a></dt><dd class="doc"><p>What to do with multiple
   consecutive delimiters
</p></dd><dt class="src"><a name="v:initBlankPolicy" class="def">initBlankPolicy</a> :: <a href="Data-List-Split-Internals.html#t:EndPolicy">EndPolicy</a></dt><dd class="doc"><p>Drop an initial blank?
</p></dd><dt class="src"><a name="v:finalBlankPolicy" class="def">finalBlankPolicy</a> :: <a href="Data-List-Split-Internals.html#t:EndPolicy">EndPolicy</a></dt><dd class="doc"><p>Drop a final blank?
</p></dd></dl><div class="clear"></div></div></td></tr></table></div></div><div class="top"><p class="src"><a name="v:defaultSplitter" class="def">defaultSplitter</a> ::  <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a<a href="src/Data-List-Split-Internals.html#defaultSplitter" class="link">Source</a></p><div class="doc"><p>The default splitting strategy: keep delimiters in the output
   as separate chunks, don't condense multiple consecutive
   delimiters into one, keep initial and final blank chunks.
   Default delimiter is the constantly false predicate.
</p><p>Note that <code><a href="Data-List-Split-Internals.html#v:defaultSplitter">defaultSplitter</a></code> should normally not be used; use
   <code><a href="Data-List-Split-Internals.html#v:oneOf">oneOf</a></code>, <code><a href="Data-List-Split-Internals.html#v:onSublist">onSublist</a></code>, or <code><a href="Data-List-Split-Internals.html#v:whenElt">whenElt</a></code> instead, which are the same as
   the <code><a href="Data-List-Split-Internals.html#v:defaultSplitter">defaultSplitter</a></code> with just the delimiter overridden.
</p><p>The <code><a href="Data-List-Split-Internals.html#v:defaultSplitter">defaultSplitter</a></code> strategy with any delimiter gives a
   maximally information-preserving splitting strategy, in the sense
   that (a) taking the <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-List.html#v:concat">concat</a></code> of the output yields the original
   list, and (b) given only the output list, we can reconstruct a
   <code><a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a></code> which would produce the same output list again given
   the original input list.  This default strategy can be overridden
   to allow discarding various sorts of information.
</p></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:Delimiter" class="def">Delimiter</a> a <span class="keyword">where</span><a href="src/Data-List-Split-Internals.html#Delimiter" class="link">Source</a></p><div class="doc"><p>A delimiter can either be a predicate on elements, or a list of
   elements to be matched as a subsequence.
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:DelimEltPred" class="def">DelimEltPred</a> ::  (a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; <a href="Data-List-Split-Internals.html#t:Delimiter">Delimiter</a> a</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:DelimSublist" class="def">DelimSublist</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; <a href="Data-List-Split-Internals.html#t:Delimiter">Delimiter</a> a</td><td class="doc empty">&nbsp;</td></tr></table></div></div><div class="top"><p class="src"><a name="v:matchDelim" class="def">matchDelim</a> ::  <a href="Data-List-Split-Internals.html#t:Delimiter">Delimiter</a> a -&gt; [a] -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Maybe.html#t:Maybe">Maybe</a> ([a], [a])<a href="src/Data-List-Split-Internals.html#matchDelim" class="link">Source</a></p><div class="doc"><p>Try to match a delimiter at the start of a list, either failing
   or decomposing the list into the portion which matched the delimiter
   and the remainder.
</p></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:DelimPolicy" class="def">DelimPolicy</a>  <a href="src/Data-List-Split-Internals.html#DelimPolicy" class="link">Source</a></p><div class="doc"><p>What to do with delimiters?
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Drop" class="def">Drop</a></td><td class="doc"><p>Drop delimiters from the output.
</p></td></tr><tr><td class="src"><a name="v:Keep" class="def">Keep</a></td><td class="doc"><p>Keep delimiters as separate chunks
   of the output.
</p></td></tr><tr><td class="src"><a name="v:KeepLeft" class="def">KeepLeft</a></td><td class="doc"><p>Keep delimiters in the output,
   prepending them to the following
   chunk.
</p></td></tr><tr><td class="src"><a name="v:KeepRight" class="def">KeepRight</a></td><td class="doc"><p>Keep delimiters in the output,
   appending them to the previous chunk.
</p></td></tr></table></div><div class="subs instances"><p id="control.i:DelimPolicy" class="caption collapser" onclick="toggleSection('i:DelimPolicy')">Instances</p><div id="section.i:DelimPolicy" class="show"><table><tr><td class="src"><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> <a href="Data-List-Split-Internals.html#t:DelimPolicy">DelimPolicy</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Text-Show.html#t:Show">Show</a> <a href="Data-List-Split-Internals.html#t:DelimPolicy">DelimPolicy</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:CondensePolicy" class="def">CondensePolicy</a>  <a href="src/Data-List-Split-Internals.html#CondensePolicy" class="link">Source</a></p><div class="doc"><p>What to do with multiple consecutive delimiters?
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Condense" class="def">Condense</a></td><td class="doc"><p>Condense into a single delimiter.
</p></td></tr><tr><td class="src"><a name="v:KeepBlankFields" class="def">KeepBlankFields</a></td><td class="doc"><p>Insert blank chunks
   between consecutive
   delimiters.
</p></td></tr></table></div><div class="subs instances"><p id="control.i:CondensePolicy" class="caption collapser" onclick="toggleSection('i:CondensePolicy')">Instances</p><div id="section.i:CondensePolicy" class="show"><table><tr><td class="src"><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> <a href="Data-List-Split-Internals.html#t:CondensePolicy">CondensePolicy</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Text-Show.html#t:Show">Show</a> <a href="Data-List-Split-Internals.html#t:CondensePolicy">CondensePolicy</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:EndPolicy" class="def">EndPolicy</a>  <a href="src/Data-List-Split-Internals.html#EndPolicy" class="link">Source</a></p><div class="doc"><p>What to do with a blank chunk at either end of the list
   (i.e. when the list begins or ends with a delimiter).
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:DropBlank" class="def">DropBlank</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:KeepBlank" class="def">KeepBlank</a></td><td class="doc empty">&nbsp;</td></tr></table></div><div class="subs instances"><p id="control.i:EndPolicy" class="caption collapser" onclick="toggleSection('i:EndPolicy')">Instances</p><div id="section.i:EndPolicy" class="show"><table><tr><td class="src"><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> <a href="Data-List-Split-Internals.html#t:EndPolicy">EndPolicy</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Text-Show.html#t:Show">Show</a> <a href="Data-List-Split-Internals.html#t:EndPolicy">EndPolicy</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:Chunk" class="def">Chunk</a> a <a href="src/Data-List-Split-Internals.html#Chunk" class="link">Source</a></p><div class="doc"><p>Tag chunks as delimiters or text.
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Delim" class="def">Delim</a> [a]</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:Text" class="def">Text</a> [a]</td><td class="doc empty">&nbsp;</td></tr></table></div><div class="subs instances"><p id="control.i:Chunk" class="caption collapser" onclick="toggleSection('i:Chunk')">Instances</p><div id="section.i:Chunk" class="show"><table><tr><td class="src"><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> (<a href="Data-List-Split-Internals.html#t:Chunk">Chunk</a> a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Text-Show.html#t:Show">Show</a> a =&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Text-Show.html#t:Show">Show</a> (<a href="Data-List-Split-Internals.html#t:Chunk">Chunk</a> a)</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:SplitList" class="def">SplitList</a> a = [<a href="Data-List-Split-Internals.html#t:Chunk">Chunk</a> a]<a href="src/Data-List-Split-Internals.html#SplitList" class="link">Source</a></p><div class="doc"><p>Internal representation of a split list that tracks which pieces
   are delimiters and which aren't.
</p></div></div><div class="top"><p class="src"><a name="v:fromElem" class="def">fromElem</a> ::  <a href="Data-List-Split-Internals.html#t:Chunk">Chunk</a> a -&gt; [a]<a href="src/Data-List-Split-Internals.html#fromElem" class="link">Source</a></p><div class="doc"><p>Untag a <code><a href="Data-List-Split-Internals.html#t:Chunk">Chunk</a></code>.
</p></div></div><div class="top"><p class="src"><a name="v:isDelim" class="def">isDelim</a> ::  <a href="Data-List-Split-Internals.html#t:Chunk">Chunk</a> a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a><a href="src/Data-List-Split-Internals.html#isDelim" class="link">Source</a></p><div class="doc"><p>Test whether a <code><a href="Data-List-Split-Internals.html#t:Chunk">Chunk</a></code> is a delimiter.
</p></div></div><div class="top"><p class="src"><a name="v:isText" class="def">isText</a> ::  <a href="Data-List-Split-Internals.html#t:Chunk">Chunk</a> a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a><a href="src/Data-List-Split-Internals.html#isText" class="link">Source</a></p><div class="doc"><p>Test whether a <code><a href="Data-List-Split-Internals.html#t:Chunk">Chunk</a></code> is text.
</p></div></div><div class="top"><p class="src"><a name="v:build" class="def">build</a> ::  (<span class="keyword">forall</span> b.  (a -&gt; b -&gt; b) -&gt; b -&gt; b) -&gt; [a]<a href="src/Data-List-Split-Internals.html#build" class="link">Source</a></p><div class="doc"><p>Standard build function.
</p></div></div><h1 id="g:2">Implementation
</h1><div class="top"><p class="src"><a name="v:splitInternal" class="def">splitInternal</a> ::  <a href="Data-List-Split-Internals.html#t:Delimiter">Delimiter</a> a -&gt; [a] -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a<a href="src/Data-List-Split-Internals.html#splitInternal" class="link">Source</a></p><div class="doc"><p>Given a delimiter to use, split a list into an internal
   representation with chunks tagged as delimiters or text.  This
   transformation is lossless; in particular, <code><code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-List.html#v:concatMap">concatMap</a></code> <code><a href="Data-List-Split-Internals.html#v:fromElem">fromElem</a></code>
   (<code><a href="Data-List-Split-Internals.html#v:splitInternal">splitInternal</a></code> d l) == l</code>.
</p></div></div><div class="top"><p class="src"><a name="v:breakDelim" class="def">breakDelim</a> ::  <a href="Data-List-Split-Internals.html#t:Delimiter">Delimiter</a> a -&gt; [a] -&gt; ([a], <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Maybe.html#t:Maybe">Maybe</a> ([a], [a]))<a href="src/Data-List-Split-Internals.html#breakDelim" class="link">Source</a></p></div><div class="top"><p class="src"><a name="v:matchSublist" class="def">matchSublist</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; [a] -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Maybe.html#t:Maybe">Maybe</a> [a]<a href="src/Data-List-Split-Internals.html#matchSublist" class="link">Source</a></p></div><div class="top"><p class="src"><a name="v:postProcess" class="def">postProcess</a> ::  <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a<a href="src/Data-List-Split-Internals.html#postProcess" class="link">Source</a></p><div class="doc"><p>Given a split list in the internal tagged representation, produce
   a new internal tagged representation corresponding to the final
   output, according to the strategy defined by the given
   <code><a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a></code>.
</p></div></div><div class="top"><p class="src"><a name="v:doDrop" class="def">doDrop</a> ::  <a href="Data-List-Split-Internals.html#t:DelimPolicy">DelimPolicy</a> -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a<a href="src/Data-List-Split-Internals.html#doDrop" class="link">Source</a></p><div class="doc"><p>Drop delimiters if the <code><a href="Data-List-Split-Internals.html#t:DelimPolicy">DelimPolicy</a></code> is <code><a href="Data-List-Split-Internals.html#v:Drop">Drop</a></code>.
</p></div></div><div class="top"><p class="src"><a name="v:doCondense" class="def">doCondense</a> ::  <a href="Data-List-Split-Internals.html#t:CondensePolicy">CondensePolicy</a> -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a<a href="src/Data-List-Split-Internals.html#doCondense" class="link">Source</a></p><div class="doc"><p>Condense multiple consecutive delimiters into one if the
   <code><a href="Data-List-Split-Internals.html#t:CondensePolicy">CondensePolicy</a></code> is <code><a href="Data-List-Split-Internals.html#v:Condense">Condense</a></code>.
</p></div></div><div class="top"><p class="src"><a name="v:insertBlanks" class="def">insertBlanks</a> ::  <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a<a href="src/Data-List-Split-Internals.html#insertBlanks" class="link">Source</a></p><div class="doc"><p>Insert blank chunks between any remaining consecutive delimiters,
   and at the beginning or end if the first or last element is a
   delimiter.
</p></div></div><div class="top"><p class="src"><a name="v:insertBlanks-39-" class="def">insertBlanks'</a> ::  <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a<a href="src/Data-List-Split-Internals.html#insertBlanks%27" class="link">Source</a></p><div class="doc"><p>Insert blank chunks between consecutive delimiters.
</p></div></div><div class="top"><p class="src"><a name="v:doMerge" class="def">doMerge</a> ::  <a href="Data-List-Split-Internals.html#t:DelimPolicy">DelimPolicy</a> -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a<a href="src/Data-List-Split-Internals.html#doMerge" class="link">Source</a></p><div class="doc"><p>Merge delimiters into adjacent chunks according to the <code><a href="Data-List-Split-Internals.html#t:DelimPolicy">DelimPolicy</a></code>.
</p></div></div><div class="top"><p class="src"><a name="v:mergeLeft" class="def">mergeLeft</a> ::  <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a<a href="src/Data-List-Split-Internals.html#mergeLeft" class="link">Source</a></p><div class="doc"><p>Merge delimiters with adjacent chunks to the right (yes, that's
   not a typo: the delimiters should end up on the left of the
   chunks, so they are merged with chunks to their right).
</p></div></div><div class="top"><p class="src"><a name="v:mergeRight" class="def">mergeRight</a> ::  <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a<a href="src/Data-List-Split-Internals.html#mergeRight" class="link">Source</a></p><div class="doc"><p>Merge delimiters with adjacent chunks to the left.
</p></div></div><div class="top"><p class="src"><a name="v:dropInitial" class="def">dropInitial</a> ::  <a href="Data-List-Split-Internals.html#t:EndPolicy">EndPolicy</a> -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a<a href="src/Data-List-Split-Internals.html#dropInitial" class="link">Source</a></p><div class="doc"><p>Drop an initial blank chunk according to the given <code><a href="Data-List-Split-Internals.html#t:EndPolicy">EndPolicy</a></code>.
</p></div></div><div class="top"><p class="src"><a name="v:dropFinal" class="def">dropFinal</a> ::  <a href="Data-List-Split-Internals.html#t:EndPolicy">EndPolicy</a> -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a -&gt; <a href="Data-List-Split-Internals.html#t:SplitList">SplitList</a> a<a href="src/Data-List-Split-Internals.html#dropFinal" class="link">Source</a></p><div class="doc"><p>Drop a final blank chunk according to the given <code><a href="Data-List-Split-Internals.html#t:EndPolicy">EndPolicy</a></code>.
</p></div></div><h1 id="g:3">Combinators
</h1><div class="top"><p class="src"><a name="v:split" class="def">split</a> ::  <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a -&gt; [a] -&gt; [[a]]<a href="src/Data-List-Split-Internals.html#split" class="link">Source</a></p><div class="doc"><p>Split a list according to the given splitting strategy.  This is
   how to &quot;run&quot; a <code><a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a></code> that has been built using the other
   combinators.
</p></div></div><h2 id="g:4">Basic strategies
</h2><div class="doc"><p>All these basic strategies have the same parameters as the
 <code><a href="Data-List-Split-Internals.html#v:defaultSplitter">defaultSplitter</a></code> except for the delimiters.
</p></div><div class="top"><p class="src"><a name="v:oneOf" class="def">oneOf</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a<a href="src/Data-List-Split-Internals.html#oneOf" class="link">Source</a></p><div class="doc"><p>A splitting strategy that splits on any one of the given
   elements.  For example:
</p><pre> split (oneOf &quot;xyz&quot;) &quot;aazbxyzcxd&quot; == [&quot;aa&quot;,&quot;z&quot;,&quot;b&quot;,&quot;x&quot;,&quot;&quot;,&quot;y&quot;,&quot;&quot;,&quot;z&quot;,&quot;c&quot;,&quot;x&quot;,&quot;d&quot;]
</pre></div></div><div class="top"><p class="src"><a name="v:onSublist" class="def">onSublist</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a<a href="src/Data-List-Split-Internals.html#onSublist" class="link">Source</a></p><div class="doc"><p>A splitting strategy that splits on the given list, when it is
   encountered as an exact subsequence.  For example:
</p><pre> split (onSublist &quot;xyz&quot;) &quot;aazbxyzcxd&quot; == [&quot;aazb&quot;,&quot;xyz&quot;,&quot;cxd&quot;]
</pre><p>Note that splitting on the empty list is a special case, which
   splits just before every element of the list being split.  For example:
</p><pre> split (onSublist &quot;&quot;) &quot;abc&quot; == [&quot;&quot;,&quot;&quot;,&quot;a&quot;,&quot;&quot;,&quot;b&quot;,&quot;&quot;,&quot;c&quot;]
 split (dropDelims . dropBlanks $ onSublist &quot;&quot;) &quot;abc&quot; == [&quot;a&quot;,&quot;b&quot;,&quot;c&quot;]
</pre><p>However, if you want to break a list into singleton elements like
   this, you are better off using <code><code><a href="Data-List-Split-Internals.html#v:splitEvery">splitEvery</a></code> 1</code>, or better yet,
   <code><code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-List.html#v:map">map</a></code> (:[])</code>.
</p></div></div><div class="top"><p class="src"><a name="v:whenElt" class="def">whenElt</a> ::  (a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a<a href="src/Data-List-Split-Internals.html#whenElt" class="link">Source</a></p><div class="doc"><p>A splitting strategy that splits on any elements that satisfy the
   given predicate.  For example:
</p><pre> split (whenElt (&lt;0)) [2,4,-3,6,-9,1] == [[2,4],[-3],[6],[-9],[1]]
</pre></div></div><h2 id="g:5">Strategy transformers
</h2><div class="top"><p class="src"><a name="v:dropDelims" class="def">dropDelims</a> ::  <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a -&gt; <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a<a href="src/Data-List-Split-Internals.html#dropDelims" class="link">Source</a></p><div class="doc"><p>Drop delimiters from the output (the default is to keep
   them). For example,
</p><pre> split (oneOf &quot;:&quot;) &quot;a:b:c&quot; == [&quot;a&quot;, &quot;:&quot;, &quot;b&quot;, &quot;:&quot;, &quot;c&quot;]
 split (dropDelims $ oneOf &quot;:&quot;) &quot;a:b:c&quot; == [&quot;a&quot;, &quot;b&quot;, &quot;c&quot;]
</pre></div></div><div class="top"><p class="src"><a name="v:keepDelimsL" class="def">keepDelimsL</a> ::  <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a -&gt; <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a<a href="src/Data-List-Split-Internals.html#keepDelimsL" class="link">Source</a></p><div class="doc"><p>Keep delimiters in the output by prepending them to adjacent
   chunks.  For example:
</p><pre> split (keepDelimsL $ oneOf &quot;xyz&quot;) &quot;aazbxyzcxd&quot; == [&quot;aa&quot;,&quot;zb&quot;,&quot;x&quot;,&quot;y&quot;,&quot;zc&quot;,&quot;xd&quot;]
</pre></div></div><div class="top"><p class="src"><a name="v:keepDelimsR" class="def">keepDelimsR</a> ::  <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a -&gt; <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a<a href="src/Data-List-Split-Internals.html#keepDelimsR" class="link">Source</a></p><div class="doc"><p>Keep delimiters in the output by appending them to adjacent
   chunks. For example:
</p><pre> split (keepDelimsR $ oneOf &quot;xyz&quot;) &quot;aazbxyzcxd&quot; == [&quot;aaz&quot;,&quot;bx&quot;,&quot;y&quot;,&quot;z&quot;,&quot;cx&quot;,&quot;d&quot;]
</pre></div></div><div class="top"><p class="src"><a name="v:condense" class="def">condense</a> ::  <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a -&gt; <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a<a href="src/Data-List-Split-Internals.html#condense" class="link">Source</a></p><div class="doc"><p>Condense multiple consecutive delimiters into one.  For example:
</p><pre> split (condense $ oneOf &quot;xyz&quot;) &quot;aazbxyzcxd&quot; == [&quot;aa&quot;,&quot;z&quot;,&quot;b&quot;,&quot;xyz&quot;,&quot;c&quot;,&quot;x&quot;,&quot;d&quot;]
 split (dropDelims $ oneOf &quot;xyz&quot;) &quot;aazbxyzcxd&quot; == [&quot;aa&quot;,&quot;b&quot;,&quot;&quot;,&quot;&quot;,&quot;c&quot;,&quot;d&quot;]
 split (condense . dropDelims $ oneOf &quot;xyz&quot;) &quot;aazbxyzcxd&quot; == [&quot;aa&quot;,&quot;b&quot;,&quot;c&quot;,&quot;d&quot;]
</pre></div></div><div class="top"><p class="src"><a name="v:dropInitBlank" class="def">dropInitBlank</a> ::  <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a -&gt; <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a<a href="src/Data-List-Split-Internals.html#dropInitBlank" class="link">Source</a></p><div class="doc"><p>Don't generate a blank chunk if there is a delimiter at the
   beginning.  For example:
</p><pre> split (oneOf &quot;:&quot;) &quot;:a:b&quot; == [&quot;&quot;,&quot;:&quot;,&quot;a&quot;,&quot;:&quot;,&quot;b&quot;]
 split (dropInitBlank $ oneOf &quot;:&quot;) &quot;:a:b&quot; == [&quot;:&quot;,&quot;a&quot;,&quot;:&quot;,&quot;b&quot;]
</pre></div></div><div class="top"><p class="src"><a name="v:dropFinalBlank" class="def">dropFinalBlank</a> ::  <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a -&gt; <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a<a href="src/Data-List-Split-Internals.html#dropFinalBlank" class="link">Source</a></p><div class="doc"><p>Don't generate a blank chunk if there is a delimiter at the end.
   For example:
</p><pre> split (oneOf &quot;:&quot;) &quot;a:b:&quot; == [&quot;a&quot;,&quot;:&quot;,&quot;b&quot;,&quot;:&quot;,&quot;&quot;]
 split (dropFinalBlank $ oneOf &quot;:&quot;) &quot;a:b:&quot; == [&quot;a&quot;,&quot;:&quot;,&quot;b&quot;,&quot;:&quot;]
</pre></div></div><h2 id="g:6">Derived combinators
</h2><div class="top"><p class="src"><a name="v:dropBlanks" class="def">dropBlanks</a> ::  <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a -&gt; <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a<a href="src/Data-List-Split-Internals.html#dropBlanks" class="link">Source</a></p><div class="doc"><p>Drop all blank chunks from the output.  Equivalent to
   <code><code><a href="Data-List-Split-Internals.html#v:dropInitBlank">dropInitBlank</a></code> . <code><a href="Data-List-Split-Internals.html#v:dropFinalBlank">dropFinalBlank</a></code> . <code><a href="Data-List-Split-Internals.html#v:condense">condense</a></code></code>.  For example:
</p><pre> split (oneOf &quot;:&quot;) &quot;::b:::a&quot; == [&quot;&quot;,&quot;:&quot;,&quot;&quot;,&quot;:&quot;,&quot;b&quot;,&quot;:&quot;,&quot;&quot;,&quot;:&quot;,&quot;&quot;,&quot;:&quot;,&quot;a&quot;]
 split (dropBlanks $ oneOf &quot;:&quot;) &quot;::b:::a&quot; == [&quot;::&quot;,&quot;b&quot;,&quot;:::&quot;,&quot;a&quot;]
</pre></div></div><div class="top"><p class="src"><a name="v:startsWith" class="def">startsWith</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a<a href="src/Data-List-Split-Internals.html#startsWith" class="link">Source</a></p><div class="doc"><p>Make a strategy that splits a list into chunks that all start
   with the given subsequence (except possibly the first).
   Equivalent to <code><code><a href="Data-List-Split-Internals.html#v:dropInitBlank">dropInitBlank</a></code> . <code><a href="Data-List-Split-Internals.html#v:keepDelimsL">keepDelimsL</a></code> . <code><a href="Data-List-Split-Internals.html#v:onSublist">onSublist</a></code></code>.
   For example:
</p><pre> split (startsWith &quot;app&quot;) &quot;applyapplicativeapplaudapproachapple&quot; == [&quot;apply&quot;,&quot;applicative&quot;,&quot;applaud&quot;,&quot;approach&quot;,&quot;apple&quot;]
</pre></div></div><div class="top"><p class="src"><a name="v:startsWithOneOf" class="def">startsWithOneOf</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a<a href="src/Data-List-Split-Internals.html#startsWithOneOf" class="link">Source</a></p><div class="doc"><p>Make a strategy that splits a list into chunks that all start
   with one of the given elements (except possibly the first).
   Equivalent to <code><code><a href="Data-List-Split-Internals.html#v:dropInitBlank">dropInitBlank</a></code> . <code><a href="Data-List-Split-Internals.html#v:keepDelimsL">keepDelimsL</a></code> . <code><a href="Data-List-Split-Internals.html#v:oneOf">oneOf</a></code></code>.  For
   example:
</p><pre> split (startsWithOneOf ['A'..'Z']) &quot;ACamelCaseIdentifier&quot; == [&quot;A&quot;,&quot;Camel&quot;,&quot;Case&quot;,&quot;Identifier&quot;]
</pre></div></div><div class="top"><p class="src"><a name="v:endsWith" class="def">endsWith</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a<a href="src/Data-List-Split-Internals.html#endsWith" class="link">Source</a></p><div class="doc"><p>Make a strategy that splits a list into chunks that all end with
   the given subsequence, except possibly the last.  Equivalent to
   <code><code><a href="Data-List-Split-Internals.html#v:dropFinalBlank">dropFinalBlank</a></code> . <code><a href="Data-List-Split-Internals.html#v:keepDelimsR">keepDelimsR</a></code> . <code><a href="Data-List-Split-Internals.html#v:onSublist">onSublist</a></code></code>.  For example:
</p><pre> split (endsWith &quot;ly&quot;) &quot;happilyslowlygnarlylily&quot; == [&quot;happily&quot;,&quot;slowly&quot;,&quot;gnarly&quot;,&quot;lily&quot;]
</pre></div></div><div class="top"><p class="src"><a name="v:endsWithOneOf" class="def">endsWithOneOf</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; <a href="Data-List-Split-Internals.html#t:Splitter">Splitter</a> a<a href="src/Data-List-Split-Internals.html#endsWithOneOf" class="link">Source</a></p><div class="doc"><p>Make a strategy that splits a list into chunks that all end with
   one of the given elements, except possibly the last.  Equivalent
   to <code><code><a href="Data-List-Split-Internals.html#v:dropFinalBlank">dropFinalBlank</a></code> . <code><a href="Data-List-Split-Internals.html#v:keepDelimsR">keepDelimsR</a></code> . <code><a href="Data-List-Split-Internals.html#v:oneOf">oneOf</a></code></code>.  For example:
</p><pre> split (condense $ endsWithOneOf &quot;.,?! &quot;) &quot;Hi, there!  How are you?&quot; == [&quot;Hi, &quot;,&quot;there!  &quot;,&quot;How &quot;,&quot;are &quot;,&quot;you?&quot;]
</pre></div></div><h2 id="g:7">Convenience functions
</h2><div class="top"><p class="src"><a name="v:splitOneOf" class="def">splitOneOf</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; [a] -&gt; [[a]]<a href="src/Data-List-Split-Internals.html#splitOneOf" class="link">Source</a></p><div class="doc"><p>Split on any of the given elements.  Equivalent to <code><code><a href="Data-List-Split-Internals.html#v:split">split</a></code>
   . <code><a href="Data-List-Split-Internals.html#v:dropDelims">dropDelims</a></code> . <code><a href="Data-List-Split-Internals.html#v:oneOf">oneOf</a></code></code>.  For example:
</p><pre> splitOneOf &quot;;.,&quot; &quot;foo,bar;baz.glurk&quot; == [&quot;foo&quot;,&quot;bar&quot;,&quot;baz&quot;,&quot;glurk&quot;]
</pre></div></div><div class="top"><p class="src"><a name="v:splitOn" class="def">splitOn</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; [a] -&gt; [[a]]<a href="src/Data-List-Split-Internals.html#splitOn" class="link">Source</a></p><div class="doc"><p>Split on the given sublist.  Equivalent to <code><code><a href="Data-List-Split-Internals.html#v:split">split</a></code>
   . <code><a href="Data-List-Split-Internals.html#v:dropDelims">dropDelims</a></code> . <code><a href="Data-List-Split-Internals.html#v:onSublist">onSublist</a></code></code>.  For example:
</p><pre> splitOn &quot;..&quot; &quot;a..b...c....d..&quot; == [&quot;a&quot;,&quot;b&quot;,&quot;.c&quot;,&quot;&quot;,&quot;d&quot;,&quot;&quot;]
</pre></div></div><div class="top"><p class="src"><a name="v:splitWhen" class="def">splitWhen</a> ::  (a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; [a] -&gt; [[a]]<a href="src/Data-List-Split-Internals.html#splitWhen" class="link">Source</a></p><div class="doc"><p>Split on elements satisfying the given predicate.  Equivalent to
   <code><code><a href="Data-List-Split-Internals.html#v:split">split</a></code> . <code><a href="Data-List-Split-Internals.html#v:dropDelims">dropDelims</a></code> . <code><a href="Data-List-Split-Internals.html#v:whenElt">whenElt</a></code></code>.  For example:
</p><pre> splitWhen (&lt;0) [1,3,-4,5,7,-9,0,2] == [[1,3],[5,7],[0,2]]
</pre></div></div><div class="top"><p class="src"><a name="v:sepBy" class="def">sepBy</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; [a] -&gt; [[a]]<a href="src/Data-List-Split-Internals.html#sepBy" class="link">Source</a></p><div class="doc"><p>A synonym for <code><a href="Data-List-Split-Internals.html#v:splitOn">splitOn</a></code>.
</p></div></div><div class="top"><p class="src"><a name="v:sepByOneOf" class="def">sepByOneOf</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; [a] -&gt; [[a]]<a href="src/Data-List-Split-Internals.html#sepByOneOf" class="link">Source</a></p><div class="doc"><p>A synonym for <code><a href="Data-List-Split-Internals.html#v:splitOneOf">splitOneOf</a></code>.
</p></div></div><div class="top"><p class="src"><a name="v:endBy" class="def">endBy</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; [a] -&gt; [[a]]<a href="src/Data-List-Split-Internals.html#endBy" class="link">Source</a></p><div class="doc"><p>Split into chunks terminated by the given subsequence.
   Equivalent to <code><code><a href="Data-List-Split-Internals.html#v:split">split</a></code> . <code><a href="Data-List-Split-Internals.html#v:dropFinalBlank">dropFinalBlank</a></code> . <code><a href="Data-List-Split-Internals.html#v:dropDelims">dropDelims</a></code>
   . <code><a href="Data-List-Split-Internals.html#v:onSublist">onSublist</a></code></code>.  For example:
</p><pre> endBy &quot;;&quot; &quot;foo;bar;baz;&quot; == [&quot;foo&quot;,&quot;bar&quot;,&quot;baz&quot;]
</pre><p>Note also that the <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-List.html#v:lines">lines</a></code> function from <a href="Data-List.html">Data.List</a> is equivalent
   to <code><code><a href="Data-List-Split-Internals.html#v:endBy">endBy</a></code> &quot;\n&quot;</code>.
</p></div></div><div class="top"><p class="src"><a name="v:endByOneOf" class="def">endByOneOf</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; [a] -&gt; [[a]]<a href="src/Data-List-Split-Internals.html#endByOneOf" class="link">Source</a></p><div class="doc"><p>Split into chunks terminated by one of the given elements.
   Equivalent to <code><code><a href="Data-List-Split-Internals.html#v:split">split</a></code> . <code><a href="Data-List-Split-Internals.html#v:dropFinalBlank">dropFinalBlank</a></code> . <code><a href="Data-List-Split-Internals.html#v:dropDelims">dropDelims</a></code> . <code><a href="Data-List-Split-Internals.html#v:oneOf">oneOf</a></code></code>.
</p></div></div><div class="top"><p class="src"><a name="v:unintercalate" class="def">unintercalate</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; [a] -&gt; [a] -&gt; [[a]]<a href="src/Data-List-Split-Internals.html#unintercalate" class="link">Source</a></p><div class="doc"><p>A synonym for <code><a href="Data-List-Split-Internals.html#v:sepBy">sepBy</a></code> / <code><a href="Data-List-Split-Internals.html#v:splitOn">splitOn</a></code>.
</p><p>Note that this is the right inverse of the <code>intercalate</code> function
   from <a href="Data-List.html">Data.List</a>, that is, <code><code>intercalate</code> x . <code><a href="Data-List-Split-Internals.html#v:unintercalate">unintercalate</a></code> x
   == <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Prelude.html#v:id">id</a></code></code>.  It is also the case that <code><code><a href="Data-List-Split-Internals.html#v:unintercalate">unintercalate</a></code> x
   . <code>intercalate</code> x</code> is idempotent.  <code><code><a href="Data-List-Split-Internals.html#v:unintercalate">unintercalate</a></code> x
   . <code>intercalate</code> x</code> is the identity on certain lists, but it is
   tricky to state the precise conditions under which this holds.
   (For example, it is not enough to say that <code>x</code> does not occur in
   any elements of the input list.  Working out why is left as an
   exercise for the reader.)
</p></div></div><div class="top"><p class="src"><a name="v:wordsBy" class="def">wordsBy</a> ::  (a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; [a] -&gt; [[a]]<a href="src/Data-List-Split-Internals.html#wordsBy" class="link">Source</a></p><div class="doc"><p>Split into words, with word boundaries indicated by the given
   predicate.  Satisfies <code>words === wordsBy isSpace</code>; equivalent to
   <code>split . dropBlanks . dropDelims . whenElt</code>.  For example:
</p><pre> wordsBy (=='x') &quot;dogxxxcatxbirdxx&quot; == [&quot;dog&quot;,&quot;cat&quot;,&quot;bird&quot;]
</pre></div></div><div class="top"><p class="src"><a name="v:linesBy" class="def">linesBy</a> ::  (a -&gt; <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Bool.html#t:Bool">Bool</a>) -&gt; [a] -&gt; [[a]]<a href="src/Data-List-Split-Internals.html#linesBy" class="link">Source</a></p><div class="doc"><p>Split into lines, with line boundaries indicated by the given
   predicate. Satisfies <code>lines === linesBy (=='\n')</code>; equivalent to
   <code>split . dropFinalBlank . dropDelims . whenElt</code>.  For example:
</p><pre> linesBy (=='x') &quot;dogxxxcatxbirdxx&quot; == [&quot;dog&quot;,&quot;&quot;,&quot;&quot;,&quot;cat&quot;,&quot;bird&quot;,&quot;&quot;]
</pre></div></div><h1 id="g:8">Other splitting methods
</h1><div class="top"><p class="src"><a name="v:splitEvery" class="def">splitEvery</a> ::  <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Int.html#t:Int">Int</a> -&gt; [e] -&gt; [[e]]<a href="src/Data-List-Split-Internals.html#splitEvery" class="link">Source</a></p><div class="doc"><p><code><code><a href="Data-List-Split-Internals.html#v:splitEvery">splitEvery</a></code> n</code> splits a list into length-n pieces.  The last
   piece will be shorter if <code>n</code> does not evenly divide the length of
   the list.  If <code>n &lt;= 0</code>, <code><code><a href="Data-List-Split-Internals.html#v:splitEvery">splitEvery</a></code> n l</code> returns an infinite list
   of empty lists.
</p><p>Note that <code><code><a href="Data-List-Split-Internals.html#v:splitEvery">splitEvery</a></code> n []</code> is <code>[]</code>, not <code>[[]]</code>.  This is
   intentional, and is consistent with a recursive definition of
   <code><a href="Data-List-Split-Internals.html#v:splitEvery">splitEvery</a></code>; it satisfies the property that
</p><pre>splitEvery n xs ++ splitEvery n ys == splitEvery n (xs ++ ys)</pre><p>whenever <code>n</code> evenly divides the length of <code>xs</code>.
</p></div></div><div class="top"><p class="src"><a name="v:chunk" class="def">chunk</a> ::  <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-Int.html#t:Int">Int</a> -&gt; [e] -&gt; [[e]]<a href="src/Data-List-Split-Internals.html#chunk" class="link">Source</a></p><div class="doc"><p>A common synonym for <code><a href="Data-List-Split-Internals.html#v:splitEvery">splitEvery</a></code>.
</p></div></div><div class="top"><p class="src"><a name="v:splitPlaces" class="def">splitPlaces</a> :: <a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Prelude.html#t:Integral">Integral</a> a =&gt; [a] -&gt; [e] -&gt; [[e]]<a href="src/Data-List-Split-Internals.html#splitPlaces" class="link">Source</a></p><div class="doc"><p>Split a list into chunks of the given lengths. For example:
</p><pre> splitPlaces [2,3,4] [1..20] == [[1,2],[3,4,5],[6,7,8,9]]
 splitPlaces [4,9] [1..10] == [[1,2,3,4],[5,6,7,8,9,10]]
</pre><p>The behavior of <code><code><a href="Data-List-Split-Internals.html#v:splitPlaces">splitPlaces</a></code> ls xs</code> when <code><code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-List.html#v:sum">sum</a></code> ls /= <code><a href="/usr/share/doc/ghc/html/libraries/base-4.3.1.0/Data-List.html#v:length">length</a></code> xs</code> can
   be inferred from the above examples and the fact that <code><a href="Data-List-Split-Internals.html#v:splitPlaces">splitPlaces</a></code>
   is total.
</p></div></div><div class="top"><p class="src"><a name="v:chop" class="def">chop</a> ::  ([a] -&gt; (b, [a])) -&gt; [a] -&gt; [b]<a href="src/Data-List-Split-Internals.html#chop" class="link">Source</a></p><div class="doc"><p>A useful recursion pattern for processing a list to produce a new
   list, often used for &quot;chopping&quot; up the input list.  Typically
   chop is called with some function that will consume an initial
   prefix of the list and produce a value and the rest of the list.
</p><p>For example, many common Prelude functions can be implemented in
   terms of <code>chop</code>:
</p><pre> group :: (Eq a) =&gt; [a] -&gt; [[a]]
 group = chop (\ xs@(x:_) -&gt; span (==x) xs)

 words :: String -&gt; [String]
 words = filter (not . null) . chop (span (not . isSpace) . dropWhile isSpace)
</pre></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>