singletons-base-3.2: src/Data/List/Singletons.hs
{-# LANGUAGE ExplicitNamespaces #-}
-----------------------------------------------------------------------------
-- |
-- Module : Data.List.Singletons
-- Copyright : (C) 2013-2014 Richard Eisenberg, Jan Stolarek
-- License : BSD-style (see LICENSE)
-- Maintainer : Ryan Scott
-- Stability : experimental
-- Portability : non-portable
--
-- Defines functions and datatypes relating to the singleton for '[]',
-- including singled versions of a few of the definitions in @Data.List@.
--
-- Because many of these definitions are produced by Template Haskell,
-- it is not possible to create proper Haddock documentation. Please look
-- up the corresponding operation in @Data.List@. Also, please excuse
-- the apparent repeated variable names. This is due to an interaction
-- between Template Haskell and Haddock.
--
----------------------------------------------------------------------------
module Data.List.Singletons (
-- * The singleton for lists
Sing, SList(..),
-- * Basic functions
type (++), (%++), Head, sHead, Last, sLast, Tail, sTail, Init, sInit,
Null, sNull, Length, sLength,
-- * List transformations
Map, sMap, Reverse, sReverse, Intersperse, sIntersperse,
Intercalate, sIntercalate, Transpose, sTranspose,
Subsequences, sSubsequences, Permutations, sPermutations,
-- * Reducing lists (folds)
Foldl, sFoldl, Foldl', sFoldl', Foldl1, sFoldl1, Foldl1', sFoldl1',
Foldr, sFoldr, Foldr1, sFoldr1,
-- ** Special folds
Concat, sConcat, ConcatMap, sConcatMap,
And, sAnd, Or, sOr, Any, sAny, All, sAll,
Sum, sSum, Product, sProduct, Maximum, sMaximum,
Minimum, sMinimum,
-- * Building lists
-- ** Scans
Scanl, sScanl, Scanl1, sScanl1, Scanr, sScanr, Scanr1, sScanr1,
-- ** Accumulating maps
MapAccumL, sMapAccumL, MapAccumR, sMapAccumR,
-- ** Cyclical lists
Replicate, sReplicate,
-- ** Unfolding
Unfoldr, sUnfoldr,
-- * Sublists
-- ** Extracting sublists
Take, sTake, Drop, sDrop, SplitAt, sSplitAt,
TakeWhile, sTakeWhile, DropWhile, sDropWhile, DropWhileEnd, sDropWhileEnd,
Span, sSpan, Break, sBreak,
StripPrefix,
Group, sGroup,
Inits, sInits, Tails, sTails,
-- ** Predicates
IsPrefixOf, sIsPrefixOf, IsSuffixOf, sIsSuffixOf, IsInfixOf, sIsInfixOf,
-- * Searching lists
-- ** Searching by equality
Elem, sElem, NotElem, sNotElem, Lookup, sLookup,
-- ** Searching with a predicate
Find, sFind, Filter, sFilter, Partition, sPartition,
-- * Indexing lists
type (!!), (%!!),
ElemIndex, sElemIndex, ElemIndices, sElemIndices,
FindIndex, sFindIndex, FindIndices, sFindIndices,
-- * Zipping and unzipping lists
Zip, sZip, Zip3, sZip3,
Zip4, Zip5, Zip6, Zip7,
ZipWith, sZipWith, ZipWith3, sZipWith3,
ZipWith4, ZipWith5, ZipWith6, ZipWith7,
Unzip, sUnzip, Unzip3, sUnzip3, Unzip4, sUnzip4,
Unzip5, sUnzip5, Unzip6, sUnzip6, Unzip7, sUnzip7,
-- * Special lists
-- ** Functions on 'Symbol's
Unlines, sUnlines,
Unwords, sUnwords,
-- ** \"Set\" operations
Nub, sNub, Delete, sDelete, type (\\), (%\\),
Union, sUnion, Intersect, sIntersect,
-- ** Ordered lists
Insert, sInsert, Sort, sSort,
-- * Generalized functions
-- ** The \"@By@\" operations
-- *** User-supplied equality (replacing an @Eq@ context)
-- | The predicate is assumed to define an equivalence.
NubBy, sNubBy,
DeleteBy, sDeleteBy, DeleteFirstsBy, sDeleteFirstsBy,
UnionBy, sUnionBy, IntersectBy, sIntersectBy,
GroupBy, sGroupBy,
-- *** User-supplied comparison (replacing an @Ord@ context)
-- | The function is assumed to define a total ordering.
SortBy, sSortBy, InsertBy, sInsertBy,
MaximumBy, sMaximumBy, MinimumBy, sMinimumBy,
-- ** The \"@generic@\" operations
-- | The prefix \`@generic@\' indicates an overloaded function that
-- is a generalized version of a "Prelude" function.
GenericLength, sGenericLength,
-- * Defunctionalization symbols
NilSym0,
(:@#@$), (:@#@$$), (:@#@$$$),
type (++@#@$$$), type (++@#@$$), type (++@#@$),
HeadSym0, HeadSym1, LastSym0, LastSym1,
TailSym0, TailSym1, InitSym0, InitSym1, NullSym0, NullSym1,
LengthSym0, LengthSym1,
MapSym0, MapSym1, MapSym2, ReverseSym0, ReverseSym1,
IntersperseSym0, IntersperseSym1, IntersperseSym2,
IntercalateSym0, IntercalateSym1, IntercalateSym2,
TransposeSym0, TransposeSym1,
SubsequencesSym0, SubsequencesSym1,
PermutationsSym0, PermutationsSym1,
FoldlSym0, FoldlSym1, FoldlSym2, FoldlSym3,
Foldl'Sym0, Foldl'Sym1, Foldl'Sym2, Foldl'Sym3,
Foldl1Sym0, Foldl1Sym1, Foldl1Sym2,
Foldl1'Sym0, Foldl1'Sym1, Foldl1'Sym2,
FoldrSym0, FoldrSym1, FoldrSym2, FoldrSym3,
Foldr1Sym0, Foldr1Sym1, Foldr1Sym2,
ConcatSym0, ConcatSym1,
ConcatMapSym0, ConcatMapSym1, ConcatMapSym2,
AndSym0, AndSym1, OrSym0, OrSym1,
AnySym0, AnySym1, AnySym2,
AllSym0, AllSym1, AllSym2,
SumSym0, SumSym1,
ProductSym0, ProductSym1,
MaximumSym0, MaximumSym1,
MinimumSym0, MinimumSym1,
ScanlSym0, ScanlSym1, ScanlSym2, ScanlSym3,
Scanl1Sym0, Scanl1Sym1, Scanl1Sym2,
ScanrSym0, ScanrSym1, ScanrSym2, ScanrSym3,
Scanr1Sym0, Scanr1Sym1, Scanr1Sym2,
MapAccumLSym0, MapAccumLSym1, MapAccumLSym2, MapAccumLSym3,
MapAccumRSym0, MapAccumRSym1, MapAccumRSym2, MapAccumRSym3,
ReplicateSym0, ReplicateSym1, ReplicateSym2,
UnfoldrSym0, UnfoldrSym1, UnfoldrSym2,
TakeSym0, TakeSym1, TakeSym2,
DropSym0, DropSym1, DropSym2,
SplitAtSym0, SplitAtSym1, SplitAtSym2,
TakeWhileSym0, TakeWhileSym1, TakeWhileSym2,
DropWhileSym0, DropWhileSym1, DropWhileSym2,
DropWhileEndSym0, DropWhileEndSym1, DropWhileEndSym2,
SpanSym0, SpanSym1, SpanSym2,
BreakSym0, BreakSym1, BreakSym2,
StripPrefixSym0, StripPrefixSym1, StripPrefixSym2,
GroupSym0, GroupSym1,
InitsSym0, InitsSym1, TailsSym0, TailsSym1,
IsPrefixOfSym0, IsPrefixOfSym1, IsPrefixOfSym2,
IsSuffixOfSym0, IsSuffixOfSym1, IsSuffixOfSym2,
IsInfixOfSym0, IsInfixOfSym1, IsInfixOfSym2,
ElemSym0, ElemSym1, ElemSym2,
NotElemSym0, NotElemSym1, NotElemSym2,
LookupSym0, LookupSym1, LookupSym2,
FindSym0, FindSym1, FindSym2,
FilterSym0, FilterSym1, FilterSym2,
PartitionSym0, PartitionSym1, PartitionSym2,
type (!!@#@$), type (!!@#@$$), type (!!@#@$$$),
ElemIndexSym0, ElemIndexSym1, ElemIndexSym2,
ElemIndicesSym0, ElemIndicesSym1, ElemIndicesSym2,
FindIndexSym0, FindIndexSym1, FindIndexSym2,
FindIndicesSym0, FindIndicesSym1, FindIndicesSym2,
ZipSym0, ZipSym1, ZipSym2,
Zip3Sym0, Zip3Sym1, Zip3Sym2, Zip3Sym3,
Zip4Sym0, Zip4Sym1, Zip4Sym2, Zip4Sym3, Zip4Sym4,
Zip5Sym0, Zip5Sym1, Zip5Sym2, Zip5Sym3, Zip5Sym4, Zip5Sym5,
Zip6Sym0, Zip6Sym1, Zip6Sym2, Zip6Sym3, Zip6Sym4, Zip6Sym5, Zip6Sym6,
Zip7Sym0, Zip7Sym1, Zip7Sym2, Zip7Sym3, Zip7Sym4, Zip7Sym5, Zip7Sym6, Zip7Sym7,
ZipWithSym0, ZipWithSym1, ZipWithSym2, ZipWithSym3,
ZipWith3Sym0, ZipWith3Sym1, ZipWith3Sym2, ZipWith3Sym3, ZipWith3Sym4,
ZipWith4Sym0, ZipWith4Sym1, ZipWith4Sym2, ZipWith4Sym3, ZipWith4Sym4, ZipWith4Sym5,
ZipWith5Sym0, ZipWith5Sym1, ZipWith5Sym2, ZipWith5Sym3, ZipWith5Sym4, ZipWith5Sym5, ZipWith5Sym6,
ZipWith6Sym0, ZipWith6Sym1, ZipWith6Sym2, ZipWith6Sym3, ZipWith6Sym4, ZipWith6Sym5, ZipWith6Sym6, ZipWith6Sym7,
ZipWith7Sym0, ZipWith7Sym1, ZipWith7Sym2, ZipWith7Sym3, ZipWith7Sym4, ZipWith7Sym5, ZipWith7Sym6, ZipWith7Sym7, ZipWith7Sym8,
UnzipSym0, UnzipSym1,
Unzip3Sym0, Unzip3Sym1,
Unzip4Sym0, Unzip4Sym1,
Unzip5Sym0, Unzip5Sym1,
Unzip6Sym0, Unzip6Sym1,
Unzip7Sym0, Unzip7Sym1,
UnlinesSym0, UnlinesSym1,
UnwordsSym0, UnwordsSym1,
NubSym0, NubSym1,
DeleteSym0, DeleteSym1, DeleteSym2,
type (\\@#@$), type (\\@#@$$), type (\\@#@$$$),
UnionSym0, UnionSym1, UnionSym2,
IntersectSym0, IntersectSym1, IntersectSym2,
InsertSym0, InsertSym1, InsertSym2,
SortSym0, SortSym1,
NubBySym0, NubBySym1, NubBySym2,
DeleteBySym0, DeleteBySym1, DeleteBySym2, DeleteBySym3,
DeleteFirstsBySym0, DeleteFirstsBySym1, DeleteFirstsBySym2, DeleteFirstsBySym3,
UnionBySym0, UnionBySym1, UnionBySym2, UnionBySym3,
IntersectBySym0, IntersectBySym1, IntersectBySym2, IntersectBySym3,
GroupBySym0, GroupBySym1, GroupBySym2,
SortBySym0, SortBySym1, SortBySym2,
InsertBySym0, InsertBySym1, InsertBySym2, InsertBySym3,
MaximumBySym0, MaximumBySym1, MaximumBySym2,
MinimumBySym0, MinimumBySym1, MinimumBySym2,
GenericLengthSym0, GenericLengthSym1
) where
import Data.Foldable.Singletons
import Data.Singletons.Base.Instances
(Sing, SList(..), NilSym0, type (:@#@$), type (:@#@$$), type (:@#@$$$))
import Data.Traversable.Singletons
import GHC.Base.Singletons
( Map, MapSym0, MapSym1, MapSym2, sMap
, type (++), type (++@#@$), type (++@#@$$), type (++@#@$$$), (%++)
)
import Data.List.Singletons.Internal
hiding ( All, AllSym0, AllSym1, AllSym2, sAll
, And, AndSym0, AndSym1, sAnd
, Any, AnySym0, AnySym1, AnySym2, sAny
, Concat, ConcatSym0, ConcatSym1, sConcat
, ConcatMap, ConcatMapSym0, ConcatMapSym1, ConcatMapSym2, sConcatMap
, Elem, ElemSym0, ElemSym1, ElemSym2, sElem
, Find, FindSym0, FindSym1, FindSym2, sFind
, Foldl1, Foldl1Sym0, Foldl1Sym1, Foldl1Sym2, sFoldl1
, Foldl', Foldl'Sym0, Foldl'Sym1, Foldl'Sym2, Foldl'Sym3, sFoldl'
, Foldr1, Foldr1Sym0, Foldr1Sym1, Foldr1Sym2, sFoldr1
, MapAccumL, MapAccumLSym0, MapAccumLSym1, MapAccumLSym2, MapAccumLSym3, sMapAccumL
, MapAccumR, MapAccumRSym0, MapAccumRSym1, MapAccumRSym2, MapAccumRSym3, sMapAccumR
, Maximum, MaximumSym0, MaximumSym1, sMaximum
, MaximumBy, MaximumBySym0, MaximumBySym1, MaximumBySym2, sMaximumBy
, Minimum, MinimumSym0, MinimumSym1, sMinimum
, MinimumBy, MinimumBySym0, MinimumBySym1, MinimumBySym2, sMinimumBy
, Length, LengthSym0, LengthSym1, sLength
, NotElem, NotElemSym0, NotElemSym1, NotElemSym2, sNotElem
, Null, NullSym0, NullSym1, sNull
, Or, OrSym0, OrSym1, sOr
, Product, ProductSym0, ProductSym1, sProduct
, Sum, SumSym0, SumSym1, sSum
)