<!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 -> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A >) -> <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 => [a] -> <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 -> [a] -> <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 -> [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 -> <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 -> <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 -> b -> b) -> b -> b) -> [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 -> [a] -> <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 -> <A HREF="Data-List-Split-Internals.html#t%3ASplitList" >SplitList</A > a -> <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 > -> <A HREF="Data-List-Split-Internals.html#t%3ASplitList" >SplitList</A > a -> <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 > -> <A HREF="Data-List-Split-Internals.html#t%3ASplitList" >SplitList</A > a -> <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 -> <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 -> <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 > -> <A HREF="Data-List-Split-Internals.html#t%3ASplitList" >SplitList</A > a -> <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 -> <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 -> <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 > -> <A HREF="Data-List-Split-Internals.html#t%3ASplitList" >SplitList</A > a -> <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 > -> <A HREF="Data-List-Split-Internals.html#t%3ASplitList" >SplitList</A > a -> <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 -> [a] -> [[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 => [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" ><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 => [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" ><A HREF="#v%3AwhenElt" >whenElt</A > :: (a -> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</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" ><A HREF="#v%3AdropDelims" >dropDelims</A > :: <A HREF="Data-List-Split-Internals.html#t%3ASplitter" >Splitter</A > 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" ><A HREF="#v%3AkeepDelimsL" >keepDelimsL</A > :: <A HREF="Data-List-Split-Internals.html#t%3ASplitter" >Splitter</A > 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" ><A HREF="#v%3AkeepDelimsR" >keepDelimsR</A > :: <A HREF="Data-List-Split-Internals.html#t%3ASplitter" >Splitter</A > 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" ><A HREF="#v%3Acondense" >condense</A > :: <A HREF="Data-List-Split-Internals.html#t%3ASplitter" >Splitter</A > 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" ><A HREF="#v%3AdropInitBlank" >dropInitBlank</A > :: <A HREF="Data-List-Split-Internals.html#t%3ASplitter" >Splitter</A > 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" ><A HREF="#v%3AdropFinalBlank" >dropFinalBlank</A > :: <A HREF="Data-List-Split-Internals.html#t%3ASplitter" >Splitter</A > 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" ><A HREF="#v%3AdropBlanks" >dropBlanks</A > :: <A HREF="Data-List-Split-Internals.html#t%3ASplitter" >Splitter</A > 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" ><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 => [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" ><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 => [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" ><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 => [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" ><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 => [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" ><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 => [a] -> [a] -> [[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 => [a] -> [a] -> [[a]]</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AsplitWhen" >splitWhen</A > :: (a -> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A >) -> [a] -> [[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 => [a] -> [a] -> [[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 => [a] -> [a] -> [[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 => [a] -> [a] -> [[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 => [a] -> [a] -> [[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 => [a] -> [a] -> [[a]]</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AwordsBy" >wordsBy</A > :: (a -> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A >) -> [a] -> [[a]]</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AlinesBy" >linesBy</A > :: (a -> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A >) -> [a] -> [[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 > -> [e] -> [[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 > -> [e] -> [[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 => [a] -> [e] -> [[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 -> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A >) -> <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 => [a] -> <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 -> [a] -> <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 => <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 => <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 -> [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 -> <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 -> <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 -> b -> b) -> b -> b) -> [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 -> [a] -> <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 -> <A HREF="Data-List-Split-Internals.html#t%3ASplitList" >SplitList</A > a -> <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 > -> <A HREF="Data-List-Split-Internals.html#t%3ASplitList" >SplitList</A > a -> <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 > -> <A HREF="Data-List-Split-Internals.html#t%3ASplitList" >SplitList</A > a -> <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 -> <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 -> <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 > -> <A HREF="Data-List-Split-Internals.html#t%3ASplitList" >SplitList</A > a -> <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 -> <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 -> <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 > -> <A HREF="Data-List-Split-Internals.html#t%3ASplitList" >SplitList</A > a -> <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 > -> <A HREF="Data-List-Split-Internals.html#t%3ASplitList" >SplitList</A > a -> <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 -> [a] -> [[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 "run" 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 => [a] -> <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 "xyz") "aazbxyzcxd" == ["aa","z","b","x","","y","","z","c","x","d"] </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 => [a] -> <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 "xyz") "aazbxyzcxd" == ["aazb","xyz","cxd"] </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 "") "abc" == ["","","a","","b","","c"] split (dropDelims . dropBlanks $ onSublist "") "abc" == ["a","b","c"] </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 -> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A >) -> <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 (<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 -> <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 ":") "a:b:c" == ["a", ":", "b", ":", "c"] split (dropDelims $ oneOf ":") "a:b:c" == ["a", "b", "c"] </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 -> <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 "xyz") "aazbxyzcxd" == ["aa","zb","x","y","zc","xd"] </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 -> <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 "xyz") "aazbxyzcxd" == ["aaz","bx","y","z","cx","d"] </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 -> <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 "xyz") "aazbxyzcxd" == ["aa","z","b","xyz","c","x","d"] split (dropDelims $ oneOf "xyz") "aazbxyzcxd" == ["aa","b","","","c","d"] split (condense . dropDelims $ oneOf "xyz") "aazbxyzcxd" == ["aa","b","c","d"] </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 -> <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 ":") ":a:b" == ["",":","a",":","b"] split (dropInitBlank $ oneOf ":") ":a:b" == [":","a",":","b"] </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 -> <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 ":") "a:b:" == ["a",":","b",":",""] split (dropFinalBlank $ oneOf ":") "a:b:" == ["a",":","b",":"] </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 -> <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 ":") "::b:::a" == ["",":","",":","b",":","",":","",":","a"] split (dropBlanks $ oneOf ":") "::b:::a" == ["::","b",":::","a"] </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 => [a] -> <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 "app") "applyappicativeapplaudapproachapple" == ["apply","appicative","applaud","approach","apple"] </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 => [a] -> <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']) "ACamelCaseIdentifier" == ["A","Camel","Case","Identifier"] </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 => [a] -> <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 "ly") "happilyslowlygnarlylily" == ["happily","slowly","gnarly","lily"] </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 => [a] -> <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 ".,?! ") "Hi, there! How are you?" == ["Hi, ","there! ","How ","are ","you?"] </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 => [a] -> [a] -> [[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 ";.," "foo,bar;baz.glurk" == ["foo","bar","baz","glurk"] </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 => [a] -> [a] -> [[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 ".." "a..b...c....d.." == ["a","b",".c","","d",""] </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 -> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A >) -> [a] -> [[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 (<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 => [a] -> [a] -> [[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 => [a] -> [a] -> [[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 => [a] -> [a] -> [[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 ";" "foo;bar;baz;" == ["foo","bar","baz"] </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 > "\n"</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 => [a] -> [a] -> [[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 => [a] -> [a] -> [[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 -> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A >) -> [a] -> [[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') "dogxxxcatxbirdxx" == ["dog","cat","bird"] </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 -> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A >) -> [a] -> [[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') "dogxxxcatxbirdxx" == ["dog","","","cat","bird",""] </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 > -> [e] -> [[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 <= 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 > -> [e] -> [[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 => [a] -> [e] -> [[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 >