{-# OPTIONS_HADDOCK prune #-} -- | -- Module : Data.List.Split -- Copyright : (c) Brent Yorgey, Louis Wasserman 2008-2012 -- License : BSD-style (see LICENSE) -- Maintainer : Brent Yorgey <byorgey@gmail.com> -- Stability : stable -- Portability : Haskell 2010 -- -- The "Data.List.Split" module contains a wide range of strategies -- for splitting lists with respect to some sort of delimiter, mostly -- implemented through a unified combinator interface. The goal is to -- be flexible yet simple. See below for usage, examples, and -- detailed documentation of all exported functions. If you want to -- learn about the implementation, see "Data.List.Split.Internals". -- -- A git repository containing the source (including a module with -- over 40 QuickCheck properties) can be found at -- <https://github.com/byorgey/split>. module Data.List.Split ( -- * Getting started -- $started -- * Convenience functions -- $conv splitOn, splitOneOf, splitWhen, endBy, endByOneOf, wordsBy, linesBy, -- * Other splitting methods -- $other chunksOf, splitPlaces, splitPlacesBlanks, chop, divvy, -- * Splitting combinators -- $comb Splitter, defaultSplitter, split, -- ** Basic strategies -- $basic oneOf, onSublist, whenElt, -- ** Strategy transformers -- $transform dropDelims, keepDelimsL, keepDelimsR, condense, dropInitBlank, dropFinalBlank, dropInnerBlanks, mapSplitter, -- ** Derived combinators -- $derived dropBlanks, startsWith, startsWithOneOf, endsWith, endsWithOneOf, -- The following synonyms are deprecated, but -- still exported for now. No documentation is -- generated for them via the 'OPTIONS_HADDOCK -- prune' pragma. sepBy, sepByOneOf, unintercalate, splitEvery, chunk, ) where import Data.List.Split.Internals -- $started -- To get started, you should take a look at the functions 'splitOn', -- 'splitOneOf', 'splitWhen', 'endBy', 'chunksOf', 'splitPlaces', -- and other functions listed in the next two sections. These -- functions implement various common splitting operations, and one of -- them will probably do the job 90\% of the time. For example: -- -- >>> splitOn "x" "axbxc" -- ["a","b","c"] -- -- >>> splitOn "x" "axbxcx" -- ["a","b","c",""] -- -- >>> endBy ";" "foo;bar;baz;" -- ["foo","bar","baz"] -- -- >>> splitWhen (<0) [1,3,-4,5,7,-9,0,2] -- [[1,3],[5,7],[0,2]] -- -- >>> splitOneOf ";.," "foo,bar;baz.glurk" -- ["foo","bar","baz","glurk"] -- -- >>> chunksOf 3 ['a'..'z'] -- ["abc","def","ghi","jkl","mno","pqr","stu","vwx","yz"] -- -- If you want more flexibility, however, you can use the combinator -- library in terms of which these functions are defined. For more -- information, see the section labeled \"Splitting Combinators\". -- -- The goal of this library is to be flexible yet simple. It does not -- implement any particularly sophisticated list-splitting methods, -- nor is it tuned for speed. If you find yourself wanting something -- more complicated or optimized, it probably means you should use a -- real parsing or regular expression library. -- $conv -- These functions implement some common splitting strategies. Note -- that all of the functions in this section drop delimiters from the -- final output, since that is a more common use case. If you wish to -- keep the delimiters somehow, see the \"Splitting Combinators\" -- section. -- $other -- Other useful splitting methods which are not implemented using the -- combinator framework. -- $comb -- The core of the library is the 'Splitter' type, which represents a -- particular list-splitting strategy. All of the combinators revolve -- around constructing or transforming 'Splitter' objects; once a -- suitable 'Splitter' has been created, it can be run with the -- 'split' function. For example: -- -- >>> split (dropBlanks . condense $ whenElt (<0)) [1,2,4,-5,-6,4,9,-19,-30] -- [[1,2,4],[-5,-6],[4,9],[-19,-30]] -- $basic -- All these basic strategies have the same parameters as the -- 'defaultSplitter' except for the delimiter. -- $transform -- Functions for altering splitting strategy parameters. -- $derived -- Combinators which can be defined in terms of other combinators, but -- are provided for convenience.