pagination-0.2.0: Framework-agnostic pagination boilerplate

Copyright© 2016–2017 Mark Karpov
LicenseBSD 3 clause
MaintainerMark Karpov <markkarpov92@gmail.com>
Stabilityexperimental
Portabilityportable
Safe HaskellSafe
LanguageHaskell2010

Data.Pagination

Contents

Description

Framework-agnostic pagination boilerplate.

Synopsis

Pagination settings

data Pagination #

Settings that are required to organize data in paginated form.

Instances

Eq Pagination # 
Data Pagination # 

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Pagination -> c Pagination #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Pagination #

toConstr :: Pagination -> Constr #

dataTypeOf :: Pagination -> DataType #

dataCast1 :: Typeable (* -> *) t => (forall d. Data d => c (t d)) -> Maybe (c Pagination) #

dataCast2 :: Typeable (* -> * -> *) t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Pagination) #

gmapT :: (forall b. Data b => b -> b) -> Pagination -> Pagination #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Pagination -> r #

gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Pagination -> r #

gmapQ :: (forall d. Data d => d -> u) -> Pagination -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Pagination -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Pagination -> m Pagination #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Pagination -> m Pagination #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Pagination -> m Pagination #

Show Pagination # 
Generic Pagination # 

Associated Types

type Rep Pagination :: * -> * #

NFData Pagination # 

Methods

rnf :: Pagination -> () #

type Rep Pagination # 

mkPagination #

Arguments

:: MonadThrow m 
=> Natural

Page size

-> Natural

Page index

-> m Pagination

The pagination settings

Create a Pagination value. May throw PaginationException.

pageSize :: Pagination -> Natural #

Get page size (maximum number of items on a page) from a Pagination.

pageIndex :: Pagination -> Natural #

Get page index from a Pagination.

Paginated data

data Paginated a #

Data in the paginated form.

Instances

Functor Paginated # 

Methods

fmap :: (a -> b) -> Paginated a -> Paginated b #

(<$) :: a -> Paginated b -> Paginated a #

Foldable Paginated # 

Methods

fold :: Monoid m => Paginated m -> m #

foldMap :: Monoid m => (a -> m) -> Paginated a -> m #

foldr :: (a -> b -> b) -> b -> Paginated a -> b #

foldr' :: (a -> b -> b) -> b -> Paginated a -> b #

foldl :: (b -> a -> b) -> b -> Paginated a -> b #

foldl' :: (b -> a -> b) -> b -> Paginated a -> b #

foldr1 :: (a -> a -> a) -> Paginated a -> a #

foldl1 :: (a -> a -> a) -> Paginated a -> a #

toList :: Paginated a -> [a] #

null :: Paginated a -> Bool #

length :: Paginated a -> Int #

elem :: Eq a => a -> Paginated a -> Bool #

maximum :: Ord a => Paginated a -> a #

minimum :: Ord a => Paginated a -> a #

sum :: Num a => Paginated a -> a #

product :: Num a => Paginated a -> a #

Traversable Paginated # 

Methods

traverse :: Applicative f => (a -> f b) -> Paginated a -> f (Paginated b) #

sequenceA :: Applicative f => Paginated (f a) -> f (Paginated a) #

mapM :: Monad m => (a -> m b) -> Paginated a -> m (Paginated b) #

sequence :: Monad m => Paginated (m a) -> m (Paginated a) #

Eq a => Eq (Paginated a) # 

Methods

(==) :: Paginated a -> Paginated a -> Bool #

(/=) :: Paginated a -> Paginated a -> Bool #

Data a => Data (Paginated a) # 

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Paginated a -> c (Paginated a) #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Paginated a) #

toConstr :: Paginated a -> Constr #

dataTypeOf :: Paginated a -> DataType #

dataCast1 :: Typeable (* -> *) t => (forall d. Data d => c (t d)) -> Maybe (c (Paginated a)) #

dataCast2 :: Typeable (* -> * -> *) t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Paginated a)) #

gmapT :: (forall b. Data b => b -> b) -> Paginated a -> Paginated a #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Paginated a -> r #

gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Paginated a -> r #

gmapQ :: (forall d. Data d => d -> u) -> Paginated a -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Paginated a -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Paginated a -> m (Paginated a) #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Paginated a -> m (Paginated a) #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Paginated a -> m (Paginated a) #

Show a => Show (Paginated a) # 
Generic (Paginated a) # 

Associated Types

type Rep (Paginated a) :: * -> * #

Methods

from :: Paginated a -> Rep (Paginated a) x #

to :: Rep (Paginated a) x -> Paginated a #

NFData a => NFData (Paginated a) # 

Methods

rnf :: Paginated a -> () #

type Rep (Paginated a) # 

paginate #

Arguments

:: (Functor m, Integral n) 
=> Pagination

Pagination options

-> Natural

Total number of items

-> (n -> n -> m [a])

The element producing callback. The function takes arguments: offset and limit.

-> m (Paginated a)

The paginated data

Create paginated data.

paginatedItems :: Paginated a -> [a] #

Get subset of items for current page.

paginatedPagination :: Paginated a -> Pagination #

Get Pagination parameters that were used to create this paginated result.

paginatedPagesTotal :: Paginated a -> Natural #

Get the total number of pages in this collection.

paginatedItemsTotal :: Paginated a -> Natural #

Get the total number of items in this collection.

hasOtherPages :: Paginated a -> Bool #

Test whether there are other pages.

pageRange #

Arguments

:: Paginated a

Paginated data

-> Natural

Number of pages to show before and after

-> NonEmpty Natural

Page range

Get range of pages to show before and after the current page. This does not necessarily include the first and the last pages (they are supposed to be shown in all cases). Result of the function is always sorted.

hasPrevPage :: Paginated a -> Bool #

Is there previous page?

hasNextPage :: Paginated a -> Bool #

Is there next page?

backwardEllip #

Arguments

:: Paginated a

Paginated data

-> Natural

Number of pages to show before and after

-> Bool 

Backward ellipsis appears when page range (pages around current page to jump to) has gap between its beginning and the first page.

forwardEllip #

Arguments

:: Paginated a

Paginated data

-> Natural

Number of pages to show before and after

-> Bool

Do we have forward ellipsis?

Forward ellipsis appears when page range (pages around current page to jump to) has gap between its end and the last page.

Exceptions

data PaginationException #

Exception indicating various problems when working with paginated data.

Constructors

ZeroPageSize

Page size (number of items per page) was zero

ZeroPageIndex

Page index was zero (they start from one)

Instances

Eq PaginationException # 
Data PaginationException # 

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> PaginationException -> c PaginationException #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c PaginationException #

toConstr :: PaginationException -> Constr #

dataTypeOf :: PaginationException -> DataType #

dataCast1 :: Typeable (* -> *) t => (forall d. Data d => c (t d)) -> Maybe (c PaginationException) #

dataCast2 :: Typeable (* -> * -> *) t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c PaginationException) #

gmapT :: (forall b. Data b => b -> b) -> PaginationException -> PaginationException #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> PaginationException -> r #

gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> PaginationException -> r #

gmapQ :: (forall d. Data d => d -> u) -> PaginationException -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> PaginationException -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> PaginationException -> m PaginationException #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> PaginationException -> m PaginationException #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> PaginationException -> m PaginationException #

Show PaginationException # 
Generic PaginationException # 
Exception PaginationException # 
NFData PaginationException # 

Methods

rnf :: PaginationException -> () #

type Rep PaginationException # 
type Rep PaginationException = D1 (MetaData "PaginationException" "Data.Pagination" "pagination-0.2.0-2UtnXLNpYBgIdjNnZW241X" False) ((:+:) (C1 (MetaCons "ZeroPageSize" PrefixI False) U1) (C1 (MetaCons "ZeroPageIndex" PrefixI False) U1))