Sophie

Sophie

distrib > Fedora > 14 > x86_64 > by-pkgid > 2f3747da91a8802111664f82d8793ef7 > files > 13

ghc-split-devel-0.1.2.1-1.fc14.x86_64.rpm

<!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.List.Split.Internals</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-List-Split-Internals.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"
>split-0.1.2.1: Combinator library for splitting lists.</TD
><TD CLASS="topbut"
><A HREF="src/Data-List-Split-Internals.html"
>Source code</A
></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.List.Split.Internals</FONT
></TD
><TD ALIGN="right"
><TABLE CLASS="narrow" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="infohead"
>Portability</TD
><TD CLASS="infoval"
>unportable (GADTs, Rank2Types)</TD
></TR
><TR
><TD CLASS="infohead"
>Stability</TD
><TD CLASS="infoval"
>experimental</TD
></TR
><TR
><TD CLASS="infohead"
>Maintainer</TD
><TD CLASS="infoval"
>byorgey@gmail.com</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"
>Types and utilities
</A
></DT
><DT
><A HREF="#2"
>Implementation
</A
></DT
><DT
><A HREF="#3"
>Combinators
</A
></DT
><DD
><DL
><DT
><A HREF="#4"
>Basic strategies
</A
></DT
><DT
><A HREF="#5"
>Strategy transformers
</A
></DT
><DT
><A HREF="#6"
>Derived combinators
</A
></DT
><DT
><A HREF="#7"
>Convenience functions
</A
></DT
></DL
></DD
><DT
><A HREF="#8"
>Other splitting methods
</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"
>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.
</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"
><SPAN CLASS="keyword"
>data</SPAN
>  <A HREF="#t%3ASplitter"
>Splitter</A
> a = <A HREF="#v%3ASplitter"
>Splitter</A
> {<TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="recfield"
><A HREF="#v%3Adelimiter"
>delimiter</A
> :: <A HREF="Data-List-Split-Internals.html#t%3ADelimiter"
>Delimiter</A
> a</TD
></TR
><TR
><TD CLASS="recfield"
><A HREF="#v%3AdelimPolicy"
>delimPolicy</A
> :: <A HREF="Data-List-Split-Internals.html#t%3ADelimPolicy"
>DelimPolicy</A
></TD
></TR
><TR
><TD CLASS="recfield"
><A HREF="#v%3AcondensePolicy"
>condensePolicy</A
> :: <A HREF="Data-List-Split-Internals.html#t%3ACondensePolicy"
>CondensePolicy</A
></TD
></TR
><TR
><TD CLASS="recfield"
><A HREF="#v%3AinitBlankPolicy"
>initBlankPolicy</A
> :: <A HREF="Data-List-Split-Internals.html#t%3AEndPolicy"
>EndPolicy</A
></TD
></TR
><TR
><TD CLASS="recfield"
><A HREF="#v%3AfinalBlankPolicy"
>finalBlankPolicy</A
> :: <A HREF="Data-List-Split-Internals.html#t%3AEndPolicy"
>EndPolicy</A
></TD
></TR
></TABLE
>}</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AdefaultSplitter"
>defaultSplitter</A
> ::  <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
>  <A HREF="#t%3ADelimiter"
>Delimiter</A
> a <SPAN CLASS="keyword"
>where</SPAN
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="#v%3ADelimEltPred"
>DelimEltPred</A
> ::  (a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
>) -&gt; <A HREF="Data-List-Split-Internals.html#t%3ADelimiter"
>Delimiter</A
> a</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3ADelimSublist"
>DelimSublist</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [a] -&gt; <A HREF="Data-List-Split-Internals.html#t%3ADelimiter"
>Delimiter</A
> a</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AmatchDelim"
>matchDelim</A
> ::  <A HREF="Data-List-Split-Internals.html#t%3ADelimiter"
>Delimiter</A
> a -&gt; [a] -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> ([a], [a])</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
>  <A HREF="#t%3ADelimPolicy"
>DelimPolicy</A
>  </TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
>= <A HREF="#v%3ADrop"
>Drop</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AKeep"
>Keep</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AKeepLeft"
>KeepLeft</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AKeepRight"
>KeepRight</A
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
>  <A HREF="#t%3ACondensePolicy"
>CondensePolicy</A
>  </TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
>= <A HREF="#v%3ACondense"
>Condense</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AKeepBlankFields"
>KeepBlankFields</A
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
>  <A HREF="#t%3AEndPolicy"
>EndPolicy</A
>  </TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
>= <A HREF="#v%3ADropBlank"
>DropBlank</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AKeepBlank"
>KeepBlank</A
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
>  <A HREF="#t%3AChunk"
>Chunk</A
> a </TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
>= <A HREF="#v%3ADelim"
>Delim</A
> [a]</TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AText"
>Text</A
> [a]</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>type</SPAN
> <A HREF="#t%3ASplitList"
>SplitList</A
> a = [<A HREF="Data-List-Split-Internals.html#t%3AChunk"
>Chunk</A
> a]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AfromElem"
>fromElem</A
> ::  <A HREF="Data-List-Split-Internals.html#t%3AChunk"
>Chunk</A
> a -&gt; [a]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AisDelim"
>isDelim</A
> ::  <A HREF="Data-List-Split-Internals.html#t%3AChunk"
>Chunk</A
> a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AisText"
>isText</A
> ::  <A HREF="Data-List-Split-Internals.html#t%3AChunk"
>Chunk</A
> a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Abuild"
>build</A
> ::  (<SPAN CLASS="keyword"
>forall</SPAN
> b.  (a -&gt; b -&gt; b) -&gt; b -&gt; b) -&gt; [a]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AsplitInternal"
>splitInternal</A
> ::  <A HREF="Data-List-Split-Internals.html#t%3ADelimiter"
>Delimiter</A
> a -&gt; [a] -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3ApostProcess"
>postProcess</A
> ::  <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AdoDrop"
>doDrop</A
> ::  <A HREF="Data-List-Split-Internals.html#t%3ADelimPolicy"
>DelimPolicy</A
> -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AdoCondense"
>doCondense</A
> ::  <A HREF="Data-List-Split-Internals.html#t%3ACondensePolicy"
>CondensePolicy</A
> -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AinsertBlanks"
>insertBlanks</A
> ::  <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AinsertBlanks%27"
>insertBlanks'</A
> ::  <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AdoMerge"
>doMerge</A
> ::  <A HREF="Data-List-Split-Internals.html#t%3ADelimPolicy"
>DelimPolicy</A
> -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AmergeLeft"
>mergeLeft</A
> ::  <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AmergeRight"
>mergeRight</A
> ::  <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AdropInitial"
>dropInitial</A
> ::  <A HREF="Data-List-Split-Internals.html#t%3AEndPolicy"
>EndPolicy</A
> -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AdropFinal"
>dropFinal</A
> ::  <A HREF="Data-List-Split-Internals.html#t%3AEndPolicy"
>EndPolicy</A
> -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Asplit"
>split</A
> ::  <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a -&gt; [a] -&gt; [[a]]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AoneOf"
>oneOf</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [a] -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AonSublist"
>onSublist</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [a] -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AwhenElt"
>whenElt</A
> ::  (a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
>) -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AdropDelims"
>dropDelims</A
> ::  <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AkeepDelimsL"
>keepDelimsL</A
> ::  <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AkeepDelimsR"
>keepDelimsR</A
> ::  <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Acondense"
>condense</A
> ::  <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AdropInitBlank"
>dropInitBlank</A
> ::  <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AdropFinalBlank"
>dropFinalBlank</A
> ::  <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AdropBlanks"
>dropBlanks</A
> ::  <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AstartsWith"
>startsWith</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [a] -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AstartsWithOneOf"
>startsWithOneOf</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [a] -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AendsWith"
>endsWith</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [a] -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AendsWithOneOf"
>endsWithOneOf</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [a] -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AsplitOneOf"
>splitOneOf</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [a] -&gt; [a] -&gt; [[a]]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AsplitOn"
>splitOn</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [a] -&gt; [a] -&gt; [[a]]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AsplitWhen"
>splitWhen</A
> ::  (a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
>) -&gt; [a] -&gt; [[a]]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AsepBy"
>sepBy</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [a] -&gt; [a] -&gt; [[a]]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AsepByOneOf"
>sepByOneOf</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [a] -&gt; [a] -&gt; [[a]]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AendBy"
>endBy</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [a] -&gt; [a] -&gt; [[a]]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AendByOneOf"
>endByOneOf</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [a] -&gt; [a] -&gt; [[a]]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Aunintercalate"
>unintercalate</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [a] -&gt; [a] -&gt; [[a]]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AwordsBy"
>wordsBy</A
> ::  (a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
>) -&gt; [a] -&gt; [[a]]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AlinesBy"
>linesBy</A
> ::  (a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
>) -&gt; [a] -&gt; [[a]]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AsplitEvery"
>splitEvery</A
> ::  <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt"
>Int</A
> -&gt; [e] -&gt; [[e]]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Achunk"
>chunk</A
> ::  <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt"
>Int</A
> -&gt; [e] -&gt; [[e]]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AsplitPlaces"
>splitPlaces</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3AIntegral"
>Integral</A
> a =&gt; [a] -&gt; [e] -&gt; [[e]]</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"
>Types and utilities
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><SPAN CLASS="keyword"
>data</SPAN
>  <A NAME="t:Splitter"
><A NAME="t%3ASplitter"
></A
></A
><B
>Splitter</B
> a </TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#Splitter"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
>A splitting strategy.
</TD
></TR
><TR
><TD CLASS="section4"
>Constructors</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="5" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v:Splitter"
><A NAME="v%3ASplitter"
></A
></A
><B
>Splitter</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="body" COLSPAN="2"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v:delimiter"
><A NAME="v%3Adelimiter"
></A
></A
><B
>delimiter</B
> :: <A HREF="Data-List-Split-Internals.html#t%3ADelimiter"
>Delimiter</A
> a</TD
><TD CLASS="rdoc"
>What delimiter to split on
</TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:delimPolicy"
><A NAME="v%3AdelimPolicy"
></A
></A
><B
>delimPolicy</B
> :: <A HREF="Data-List-Split-Internals.html#t%3ADelimPolicy"
>DelimPolicy</A
></TD
><TD CLASS="rdoc"
>What to do with delimiters (drop
   from output, keep as separate
   elements in output, or merge with
   previous or following chunks)
</TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:condensePolicy"
><A NAME="v%3AcondensePolicy"
></A
></A
><B
>condensePolicy</B
> :: <A HREF="Data-List-Split-Internals.html#t%3ACondensePolicy"
>CondensePolicy</A
></TD
><TD CLASS="rdoc"
>What to do with multiple
   consecutive delimiters
</TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:initBlankPolicy"
><A NAME="v%3AinitBlankPolicy"
></A
></A
><B
>initBlankPolicy</B
> :: <A HREF="Data-List-Split-Internals.html#t%3AEndPolicy"
>EndPolicy</A
></TD
><TD CLASS="rdoc"
>Drop an initial blank?
</TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:finalBlankPolicy"
><A NAME="v%3AfinalBlankPolicy"
></A
></A
><B
>finalBlankPolicy</B
> :: <A HREF="Data-List-Split-Internals.html#t%3AEndPolicy"
>EndPolicy</A
></TD
><TD CLASS="rdoc"
>Drop a final blank?
</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:defaultSplitter"
><A NAME="v%3AdefaultSplitter"
></A
></A
><B
>defaultSplitter</B
> ::  <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#defaultSplitter"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD 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 <TT
><A HREF="Data-List-Split-Internals.html#v%3AdefaultSplitter"
>defaultSplitter</A
></TT
> should normally not be used; use
   <TT
><A HREF="Data-List-Split-Internals.html#v%3AoneOf"
>oneOf</A
></TT
>, <TT
><A HREF="Data-List-Split-Internals.html#v%3AonSublist"
>onSublist</A
></TT
>, or <TT
><A HREF="Data-List-Split-Internals.html#v%3AwhenElt"
>whenElt</A
></TT
> instead, which are the same as
   the <TT
><A HREF="Data-List-Split-Internals.html#v%3AdefaultSplitter"
>defaultSplitter</A
></TT
> with just the delimiter overridden.
</P
><P
>The <TT
><A HREF="Data-List-Split-Internals.html#v%3AdefaultSplitter"
>defaultSplitter</A
></TT
> strategy with any delimiter gives a
   maximally information-preserving splitting strategy, in the sense
   that (a) taking the <TT
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-List.html#v%3Aconcat"
>concat</A
></TT
> of the output yields the original
   list, and (b) given only the output list, we can reconstruct a
   <TT
><A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
></TT
> 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
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><SPAN CLASS="keyword"
>data</SPAN
>  <A NAME="t:Delimiter"
><A NAME="t%3ADelimiter"
></A
></A
><B
>Delimiter</B
> a <SPAN CLASS="keyword"
>where</SPAN
></TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#Delimiter"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
>A delimiter can either be a predicate on elements, or a list of
   elements to be matched as a subsequence.
</TD
></TR
><TR
><TD CLASS="section4"
>Constructors</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v:DelimEltPred"
><A NAME="v%3ADelimEltPred"
></A
></A
><B
>DelimEltPred</B
> ::  (a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
>) -&gt; <A HREF="Data-List-Split-Internals.html#t%3ADelimiter"
>Delimiter</A
> a</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:DelimSublist"
><A NAME="v%3ADelimSublist"
></A
></A
><B
>DelimSublist</B
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [a] -&gt; <A HREF="Data-List-Split-Internals.html#t%3ADelimiter"
>Delimiter</A
> a</TD
><TD CLASS="rdoc"
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:matchDelim"
><A NAME="v%3AmatchDelim"
></A
></A
><B
>matchDelim</B
> ::  <A HREF="Data-List-Split-Internals.html#t%3ADelimiter"
>Delimiter</A
> a -&gt; [a] -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> ([a], [a])</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#matchDelim"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>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.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><SPAN CLASS="keyword"
>data</SPAN
>  <A NAME="t:DelimPolicy"
><A NAME="t%3ADelimPolicy"
></A
></A
><B
>DelimPolicy</B
>  </TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#DelimPolicy"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
>What to do with delimiters?
</TD
></TR
><TR
><TD CLASS="section4"
>Constructors</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v:Drop"
><A NAME="v%3ADrop"
></A
></A
><B
>Drop</B
></TD
><TD CLASS="rdoc"
>Drop delimiters from the output.
</TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:Keep"
><A NAME="v%3AKeep"
></A
></A
><B
>Keep</B
></TD
><TD CLASS="rdoc"
>Keep delimiters as separate chunks
   of the output.
</TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:KeepLeft"
><A NAME="v%3AKeepLeft"
></A
></A
><B
>KeepLeft</B
></TD
><TD CLASS="rdoc"
>Keep delimiters in the output,
   prepending them to the following
   chunk.
</TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:KeepRight"
><A NAME="v%3AKeepRight"
></A
></A
><B
>KeepRight</B
></TD
><TD CLASS="rdoc"
>Keep delimiters in the output,
   appending them to the previous chunk.
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:DelimPolicy')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:DelimPolicy" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> <A HREF="Data-List-Split-Internals.html#t%3ADelimPolicy"
>DelimPolicy</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow"
>Show</A
> <A HREF="Data-List-Split-Internals.html#t%3ADelimPolicy"
>DelimPolicy</A
></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><SPAN CLASS="keyword"
>data</SPAN
>  <A NAME="t:CondensePolicy"
><A NAME="t%3ACondensePolicy"
></A
></A
><B
>CondensePolicy</B
>  </TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#CondensePolicy"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
>What to do with multiple consecutive delimiters?
</TD
></TR
><TR
><TD CLASS="section4"
>Constructors</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v:Condense"
><A NAME="v%3ACondense"
></A
></A
><B
>Condense</B
></TD
><TD CLASS="rdoc"
>Condense into a single delimiter.
</TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:KeepBlankFields"
><A NAME="v%3AKeepBlankFields"
></A
></A
><B
>KeepBlankFields</B
></TD
><TD CLASS="rdoc"
>Insert blank chunks
   between consecutive
   delimiters.
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:CondensePolicy')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:CondensePolicy" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> <A HREF="Data-List-Split-Internals.html#t%3ACondensePolicy"
>CondensePolicy</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow"
>Show</A
> <A HREF="Data-List-Split-Internals.html#t%3ACondensePolicy"
>CondensePolicy</A
></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><SPAN CLASS="keyword"
>data</SPAN
>  <A NAME="t:EndPolicy"
><A NAME="t%3AEndPolicy"
></A
></A
><B
>EndPolicy</B
>  </TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#EndPolicy"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
>What to do with a blank chunk at either end of the list
   (i.e. when the list begins or ends with a delimiter).
</TD
></TR
><TR
><TD CLASS="section4"
>Constructors</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v:DropBlank"
><A NAME="v%3ADropBlank"
></A
></A
><B
>DropBlank</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:KeepBlank"
><A NAME="v%3AKeepBlank"
></A
></A
><B
>KeepBlank</B
></TD
><TD CLASS="rdoc"
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:EndPolicy')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:EndPolicy" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> <A HREF="Data-List-Split-Internals.html#t%3AEndPolicy"
>EndPolicy</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow"
>Show</A
> <A HREF="Data-List-Split-Internals.html#t%3AEndPolicy"
>EndPolicy</A
></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><SPAN CLASS="keyword"
>data</SPAN
>  <A NAME="t:Chunk"
><A NAME="t%3AChunk"
></A
></A
><B
>Chunk</B
> a </TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#Chunk"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
>Tag chunks as delimiters or text.
</TD
></TR
><TR
><TD CLASS="section4"
>Constructors</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v:Delim"
><A NAME="v%3ADelim"
></A
></A
><B
>Delim</B
> [a]</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:Text"
><A NAME="v%3AText"
></A
></A
><B
>Text</B
> [a]</TD
><TD CLASS="rdoc"
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:Chunk')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:Chunk" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> (<A HREF="Data-List-Split-Internals.html#t%3AChunk"
>Chunk</A
> a)</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow"
>Show</A
> a =&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow"
>Show</A
> (<A HREF="Data-List-Split-Internals.html#t%3AChunk"
>Chunk</A
> a)</TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><SPAN CLASS="keyword"
>type</SPAN
> <A NAME="t:SplitList"
><A NAME="t%3ASplitList"
></A
></A
><B
>SplitList</B
> a = [<A HREF="Data-List-Split-Internals.html#t%3AChunk"
>Chunk</A
> a]</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#SplitList"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Internal representation of a split list that tracks which pieces
   are delimiters and which aren't.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:fromElem"
><A NAME="v%3AfromElem"
></A
></A
><B
>fromElem</B
> ::  <A HREF="Data-List-Split-Internals.html#t%3AChunk"
>Chunk</A
> a -&gt; [a]</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#fromElem"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Untag a <TT
><A HREF="Data-List-Split-Internals.html#t%3AChunk"
>Chunk</A
></TT
>.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:isDelim"
><A NAME="v%3AisDelim"
></A
></A
><B
>isDelim</B
> ::  <A HREF="Data-List-Split-Internals.html#t%3AChunk"
>Chunk</A
> a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
></TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#isDelim"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Test whether a <TT
><A HREF="Data-List-Split-Internals.html#t%3AChunk"
>Chunk</A
></TT
> is a delimiter.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:isText"
><A NAME="v%3AisText"
></A
></A
><B
>isText</B
> ::  <A HREF="Data-List-Split-Internals.html#t%3AChunk"
>Chunk</A
> a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
></TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#isText"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Test whether a <TT
><A HREF="Data-List-Split-Internals.html#t%3AChunk"
>Chunk</A
></TT
> is text.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:build"
><A NAME="v%3Abuild"
></A
></A
><B
>build</B
> ::  (<SPAN CLASS="keyword"
>forall</SPAN
> b.  (a -&gt; b -&gt; b) -&gt; b -&gt; b) -&gt; [a]</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#build"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Standard build function.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="2"
><A NAME="2"
>Implementation
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:splitInternal"
><A NAME="v%3AsplitInternal"
></A
></A
><B
>splitInternal</B
> ::  <A HREF="Data-List-Split-Internals.html#t%3ADelimiter"
>Delimiter</A
> a -&gt; [a] -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#splitInternal"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>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, <TT
><TT
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-List.html#v%3AconcatMap"
>concatMap</A
></TT
> <TT
><A HREF="Data-List-Split-Internals.html#v%3AfromElem"
>fromElem</A
></TT
>
   (<TT
><A HREF="Data-List-Split-Internals.html#v%3AsplitInternal"
>splitInternal</A
></TT
> d l) == l</TT
>.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:postProcess"
><A NAME="v%3ApostProcess"
></A
></A
><B
>postProcess</B
> ::  <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#postProcess"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>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
   <TT
><A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
></TT
>.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:doDrop"
><A NAME="v%3AdoDrop"
></A
></A
><B
>doDrop</B
> ::  <A HREF="Data-List-Split-Internals.html#t%3ADelimPolicy"
>DelimPolicy</A
> -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#doDrop"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Drop delimiters if the <TT
><A HREF="Data-List-Split-Internals.html#t%3ADelimPolicy"
>DelimPolicy</A
></TT
> is <TT
><A HREF="Data-List-Split-Internals.html#v%3ADrop"
>Drop</A
></TT
>.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:doCondense"
><A NAME="v%3AdoCondense"
></A
></A
><B
>doCondense</B
> ::  <A HREF="Data-List-Split-Internals.html#t%3ACondensePolicy"
>CondensePolicy</A
> -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#doCondense"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Condense multiple consecutive delimiters into one if the
   <TT
><A HREF="Data-List-Split-Internals.html#t%3ACondensePolicy"
>CondensePolicy</A
></TT
> is <TT
><A HREF="Data-List-Split-Internals.html#v%3ACondense"
>Condense</A
></TT
>.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:insertBlanks"
><A NAME="v%3AinsertBlanks"
></A
></A
><B
>insertBlanks</B
> ::  <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#insertBlanks"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Insert blank chunks between any remaining consecutive delimiters,
   and at the beginning or end if the first or last element is a
   delimiter.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:insertBlanks'"
><A NAME="v%3AinsertBlanks%27"
></A
></A
><B
>insertBlanks'</B
> ::  <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#insertBlanks%27"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Insert blank chunks between consecutive delimiters.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:doMerge"
><A NAME="v%3AdoMerge"
></A
></A
><B
>doMerge</B
> ::  <A HREF="Data-List-Split-Internals.html#t%3ADelimPolicy"
>DelimPolicy</A
> -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#doMerge"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Merge delimiters into adjacent chunks according to the <TT
><A HREF="Data-List-Split-Internals.html#t%3ADelimPolicy"
>DelimPolicy</A
></TT
>.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:mergeLeft"
><A NAME="v%3AmergeLeft"
></A
></A
><B
>mergeLeft</B
> ::  <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#mergeLeft"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>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).
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:mergeRight"
><A NAME="v%3AmergeRight"
></A
></A
><B
>mergeRight</B
> ::  <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#mergeRight"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Merge delimiters with adjacent chunks to the left.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:dropInitial"
><A NAME="v%3AdropInitial"
></A
></A
><B
>dropInitial</B
> ::  <A HREF="Data-List-Split-Internals.html#t%3AEndPolicy"
>EndPolicy</A
> -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#dropInitial"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Drop an initial blank chunk according to the given <TT
><A HREF="Data-List-Split-Internals.html#t%3AEndPolicy"
>EndPolicy</A
></TT
>.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:dropFinal"
><A NAME="v%3AdropFinal"
></A
></A
><B
>dropFinal</B
> ::  <A HREF="Data-List-Split-Internals.html#t%3AEndPolicy"
>EndPolicy</A
> -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitList"
>SplitList</A
> a</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#dropFinal"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Drop a final blank chunk according to the given <TT
><A HREF="Data-List-Split-Internals.html#t%3AEndPolicy"
>EndPolicy</A
></TT
>.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="3"
><A NAME="3"
>Combinators
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:split"
><A NAME="v%3Asplit"
></A
></A
><B
>split</B
> ::  <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a -&gt; [a] -&gt; [[a]]</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#split"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Split a list according to the given splitting strategy.  This is
   how to &quot;run&quot; a <TT
><A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
></TT
> that has been built using the other
   combinators.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="4"
><A NAME="4"
>Basic strategies
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="doc"
>All these basic strategies have the same parameters as the
 <TT
><A HREF="Data-List-Split-Internals.html#v%3AdefaultSplitter"
>defaultSplitter</A
></TT
> except for the delimiters.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:oneOf"
><A NAME="v%3AoneOf"
></A
></A
><B
>oneOf</B
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [a] -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#oneOf"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD 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
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:onSublist"
><A NAME="v%3AonSublist"
></A
></A
><B
>onSublist</B
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [a] -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#onSublist"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD 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 <TT
><TT
><A HREF="Data-List-Split-Internals.html#v%3AsplitEvery"
>splitEvery</A
></TT
> 1</TT
>, or better yet,
   <TT
><TT
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-List.html#v%3Amap"
>map</A
></TT
> (:[])</TT
>.
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:whenElt"
><A NAME="v%3AwhenElt"
></A
></A
><B
>whenElt</B
> ::  (a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
>) -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#whenElt"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD 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
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="5"
><A NAME="5"
>Strategy transformers
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:dropDelims"
><A NAME="v%3AdropDelims"
></A
></A
><B
>dropDelims</B
> ::  <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#dropDelims"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD 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
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:keepDelimsL"
><A NAME="v%3AkeepDelimsL"
></A
></A
><B
>keepDelimsL</B
> ::  <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#keepDelimsL"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD 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
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:keepDelimsR"
><A NAME="v%3AkeepDelimsR"
></A
></A
><B
>keepDelimsR</B
> ::  <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#keepDelimsR"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD 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
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:condense"
><A NAME="v%3Acondense"
></A
></A
><B
>condense</B
> ::  <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#condense"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD 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
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:dropInitBlank"
><A NAME="v%3AdropInitBlank"
></A
></A
><B
>dropInitBlank</B
> ::  <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#dropInitBlank"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD 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
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:dropFinalBlank"
><A NAME="v%3AdropFinalBlank"
></A
></A
><B
>dropFinalBlank</B
> ::  <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#dropFinalBlank"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD 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
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="6"
><A NAME="6"
>Derived combinators
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:dropBlanks"
><A NAME="v%3AdropBlanks"
></A
></A
><B
>dropBlanks</B
> ::  <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#dropBlanks"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
><P
>Drop all blank chunks from the output.  Equivalent to
   <TT
><TT
><A HREF="Data-List-Split-Internals.html#v%3AdropInitBlank"
>dropInitBlank</A
></TT
> . <TT
><A HREF="Data-List-Split-Internals.html#v%3AdropFinalBlank"
>dropFinalBlank</A
></TT
> . <TT
><A HREF="Data-List-Split-Internals.html#v%3Acondense"
>condense</A
></TT
></TT
>.  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
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:startsWith"
><A NAME="v%3AstartsWith"
></A
></A
><B
>startsWith</B
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [a] -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#startsWith"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD 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 <TT
><TT
><A HREF="Data-List-Split-Internals.html#v%3AdropInitBlank"
>dropInitBlank</A
></TT
> . <TT
><A HREF="Data-List-Split-Internals.html#v%3AkeepDelimsL"
>keepDelimsL</A
></TT
> . <TT
><A HREF="Data-List-Split-Internals.html#v%3AonSublist"
>onSublist</A
></TT
></TT
>.
   For example:
</P
><PRE
> split (startsWith &quot;app&quot;) &quot;applyappicativeapplaudapproachapple&quot; == [&quot;apply&quot;,&quot;appicative&quot;,&quot;applaud&quot;,&quot;approach&quot;,&quot;apple&quot;]
</PRE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:startsWithOneOf"
><A NAME="v%3AstartsWithOneOf"
></A
></A
><B
>startsWithOneOf</B
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [a] -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#startsWithOneOf"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD 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 <TT
><TT
><A HREF="Data-List-Split-Internals.html#v%3AdropInitBlank"
>dropInitBlank</A
></TT
> . <TT
><A HREF="Data-List-Split-Internals.html#v%3AkeepDelimsL"
>keepDelimsL</A
></TT
> . <TT
><A HREF="Data-List-Split-Internals.html#v%3AoneOf"
>oneOf</A
></TT
></TT
>.  For
   example:
</P
><PRE
> split (startsWithOneOf ['A'..'Z']) &quot;ACamelCaseIdentifier&quot; == [&quot;A&quot;,&quot;Camel&quot;,&quot;Case&quot;,&quot;Identifier&quot;]
</PRE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:endsWith"
><A NAME="v%3AendsWith"
></A
></A
><B
>endsWith</B
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [a] -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#endsWith"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD 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
   <TT
><TT
><A HREF="Data-List-Split-Internals.html#v%3AdropFinalBlank"
>dropFinalBlank</A
></TT
> . <TT
><A HREF="Data-List-Split-Internals.html#v%3AkeepDelimsR"
>keepDelimsR</A
></TT
> . <TT
><A HREF="Data-List-Split-Internals.html#v%3AonSublist"
>onSublist</A
></TT
></TT
>.  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
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:endsWithOneOf"
><A NAME="v%3AendsWithOneOf"
></A
></A
><B
>endsWithOneOf</B
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [a] -&gt; <A HREF="Data-List-Split-Internals.html#t%3ASplitter"
>Splitter</A
> a</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#endsWithOneOf"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD 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 <TT
><TT
><A HREF="Data-List-Split-Internals.html#v%3AdropFinalBlank"
>dropFinalBlank</A
></TT
> . <TT
><A HREF="Data-List-Split-Internals.html#v%3AkeepDelimsR"
>keepDelimsR</A
></TT
> . <TT
><A HREF="Data-List-Split-Internals.html#v%3AoneOf"
>oneOf</A
></TT
></TT
>.  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
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="7"
><A NAME="7"
>Convenience functions
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:splitOneOf"
><A NAME="v%3AsplitOneOf"
></A
></A
><B
>splitOneOf</B
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [a] -&gt; [a] -&gt; [[a]]</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#splitOneOf"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
><P
>Split on any of the given elements.  Equivalent to <TT
><TT
><A HREF="Data-List-Split-Internals.html#v%3Asplit"
>split</A
></TT
>
   . <TT
><A HREF="Data-List-Split-Internals.html#v%3AdropDelims"
>dropDelims</A
></TT
> . <TT
><A HREF="Data-List-Split-Internals.html#v%3AoneOf"
>oneOf</A
></TT
></TT
>.  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
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:splitOn"
><A NAME="v%3AsplitOn"
></A
></A
><B
>splitOn</B
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [a] -&gt; [a] -&gt; [[a]]</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#splitOn"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
><P
>Split on the given sublist.  Equivalent to <TT
><TT
><A HREF="Data-List-Split-Internals.html#v%3Asplit"
>split</A
></TT
>
   . <TT
><A HREF="Data-List-Split-Internals.html#v%3AdropDelims"
>dropDelims</A
></TT
> . <TT
><A HREF="Data-List-Split-Internals.html#v%3AonSublist"
>onSublist</A
></TT
></TT
>.  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
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:splitWhen"
><A NAME="v%3AsplitWhen"
></A
></A
><B
>splitWhen</B
> ::  (a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
>) -&gt; [a] -&gt; [[a]]</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#splitWhen"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
><P
>Split on elements satisfying the given predicate.  Equivalent to
   <TT
><TT
><A HREF="Data-List-Split-Internals.html#v%3Asplit"
>split</A
></TT
> . <TT
><A HREF="Data-List-Split-Internals.html#v%3AdropDelims"
>dropDelims</A
></TT
> . <TT
><A HREF="Data-List-Split-Internals.html#v%3AwhenElt"
>whenElt</A
></TT
></TT
>.  For example:
</P
><PRE
> splitWhen (&lt;0) [1,3,-4,5,7,-9,0,2] == [[1,3],[5,7],[0,2]]
</PRE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:sepBy"
><A NAME="v%3AsepBy"
></A
></A
><B
>sepBy</B
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [a] -&gt; [a] -&gt; [[a]]</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#sepBy"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>A synonym for <TT
><A HREF="Data-List-Split-Internals.html#v%3AsplitOn"
>splitOn</A
></TT
>.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:sepByOneOf"
><A NAME="v%3AsepByOneOf"
></A
></A
><B
>sepByOneOf</B
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [a] -&gt; [a] -&gt; [[a]]</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#sepByOneOf"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>A synonym for <TT
><A HREF="Data-List-Split-Internals.html#v%3AsplitOneOf"
>splitOneOf</A
></TT
>.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:endBy"
><A NAME="v%3AendBy"
></A
></A
><B
>endBy</B
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [a] -&gt; [a] -&gt; [[a]]</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#endBy"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
><P
>Split into chunks terminated by the given subsequence.
   Equivalent to <TT
><TT
><A HREF="Data-List-Split-Internals.html#v%3Asplit"
>split</A
></TT
> . <TT
><A HREF="Data-List-Split-Internals.html#v%3AdropFinalBlank"
>dropFinalBlank</A
></TT
> . <TT
><A HREF="Data-List-Split-Internals.html#v%3AdropDelims"
>dropDelims</A
></TT
>
   . <TT
><A HREF="Data-List-Split-Internals.html#v%3AonSublist"
>onSublist</A
></TT
></TT
>.  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 <TT
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-List.html#v%3Alines"
>lines</A
></TT
> function from <A HREF="Data-List.html"
>Data.List</A
> is equivalent
   to <TT
><TT
><A HREF="Data-List-Split-Internals.html#v%3AendBy"
>endBy</A
></TT
> &quot;\n&quot;</TT
>.
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:endByOneOf"
><A NAME="v%3AendByOneOf"
></A
></A
><B
>endByOneOf</B
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [a] -&gt; [a] -&gt; [[a]]</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#endByOneOf"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>Split into chunks terminated by one of the given elements.
   Equivalent to <TT
><TT
><A HREF="Data-List-Split-Internals.html#v%3Asplit"
>split</A
></TT
> . <TT
><A HREF="Data-List-Split-Internals.html#v%3AdropFinalBlank"
>dropFinalBlank</A
></TT
> . <TT
><A HREF="Data-List-Split-Internals.html#v%3AdropDelims"
>dropDelims</A
></TT
> . <TT
><A HREF="Data-List-Split-Internals.html#v%3AoneOf"
>oneOf</A
></TT
></TT
>.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:unintercalate"
><A NAME="v%3Aunintercalate"
></A
></A
><B
>unintercalate</B
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [a] -&gt; [a] -&gt; [[a]]</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#unintercalate"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
><P
>A synonym for <TT
><A HREF="Data-List-Split-Internals.html#v%3AsepBy"
>sepBy</A
></TT
> / <TT
><A HREF="Data-List-Split-Internals.html#v%3AsplitOn"
>splitOn</A
></TT
>.
</P
><P
>Note that this is the right inverse of the intercalate function
   from <A HREF="Data-List.html"
>Data.List</A
>, that is, <TT
>intercalate x . <TT
><A HREF="Data-List-Split-Internals.html#v%3Aunintercalate"
>unintercalate</A
></TT
> x
   == <TT
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#v%3Aid"
>id</A
></TT
></TT
>.  It is also the case that <TT
><TT
><A HREF="Data-List-Split-Internals.html#v%3Aunintercalate"
>unintercalate</A
></TT
> x
   . intercalate x</TT
> is idempotent.  <TT
><TT
><A HREF="Data-List-Split-Internals.html#v%3Aunintercalate"
>unintercalate</A
></TT
> x
   . intercalate x</TT
> 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 <TT
>x</TT
> does not occur in
   any elements of the input list.  Working out why is left as an
   exercise for the reader.)
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:wordsBy"
><A NAME="v%3AwordsBy"
></A
></A
><B
>wordsBy</B
> ::  (a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
>) -&gt; [a] -&gt; [[a]]</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#wordsBy"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
><P
>Split into words, with word boundaries indicated by the given
   predicate.  Satisfies <TT
>words === wordsBy isSpace</TT
>; equivalent to
   <TT
>split . dropBlanks . dropDelims . whenElt</TT
>.  For example:
</P
><PRE
> wordsBy (=='x') &quot;dogxxxcatxbirdxx&quot; == [&quot;dog&quot;,&quot;cat&quot;,&quot;bird&quot;]
</PRE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:linesBy"
><A NAME="v%3AlinesBy"
></A
></A
><B
>linesBy</B
> ::  (a -&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool"
>Bool</A
>) -&gt; [a] -&gt; [[a]]</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#linesBy"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
><P
>Split into lines, with line boundaries indicated by the given
   predicate. Satisfies <TT
>lines === linesBy (=='\n')</TT
>; equivalent to
   <TT
>split . dropFinalBlank . dropDelims . whenElt</TT
>.  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
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="8"
><A NAME="8"
>Other splitting methods
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:splitEvery"
><A NAME="v%3AsplitEvery"
></A
></A
><B
>splitEvery</B
> ::  <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt"
>Int</A
> -&gt; [e] -&gt; [[e]]</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#splitEvery"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
><P
><TT
><TT
><A HREF="Data-List-Split-Internals.html#v%3AsplitEvery"
>splitEvery</A
></TT
> n</TT
> splits a list into length-n pieces.  The last
   piece will be shorter if <TT
>n</TT
> does not evenly divide the length of
   the list.  If <TT
>n &lt;= 0</TT
>, <TT
><TT
><A HREF="Data-List-Split-Internals.html#v%3AsplitEvery"
>splitEvery</A
></TT
> n l</TT
> returns an infinite list
   of empty lists.
</P
><P
>Note that <TT
><TT
><A HREF="Data-List-Split-Internals.html#v%3AsplitEvery"
>splitEvery</A
></TT
> n []</TT
> is <TT
>[]</TT
>, not <TT
>[[]]</TT
>.  This is
   intentional, and is consistent with a recursive definition of
   <TT
><A HREF="Data-List-Split-Internals.html#v%3AsplitEvery"
>splitEvery</A
></TT
>; it satisfies the property that
</P
><PRE
>splitEvery n xs ++ splitEvery n ys == splitEvery n (xs ++ ys)</PRE
><P
>whenever <TT
>n</TT
> evenly divides the length of <TT
>xs</TT
>.
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:chunk"
><A NAME="v%3Achunk"
></A
></A
><B
>chunk</B
> ::  <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt"
>Int</A
> -&gt; [e] -&gt; [[e]]</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#chunk"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>A common synonym for <TT
><A HREF="Data-List-Split-Internals.html#v%3AsplitEvery"
>splitEvery</A
></TT
>.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:splitPlaces"
><A NAME="v%3AsplitPlaces"
></A
></A
><B
>splitPlaces</B
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Prelude.html#t%3AIntegral"
>Integral</A
> a =&gt; [a] -&gt; [e] -&gt; [[e]]</TD
><TD CLASS="declbut"
><A HREF="src/Data-List-Split-Internals.html#splitPlaces"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD 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 <TT
><TT
><A HREF="Data-List-Split-Internals.html#v%3AsplitPlaces"
>splitPlaces</A
></TT
> ls xs</TT
> when <TT
><TT
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-List.html#v%3Asum"
>sum</A
></TT
> ls /= <TT
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-List.html#v%3Alength"
>length</A
></TT
> xs</TT
> can
   be inferred from the above examples and the fact that <TT
><A HREF="Data-List-Split-Internals.html#v%3AsplitPlaces"
>splitPlaces</A
></TT
>
   is total.
</P
></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.6.1</TD
></TR
></TABLE
></BODY
></HTML
>