-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Safe wrappers for partial list functions, supporting MonadThrow. -- -- Data.List includes a handful of partial functions that throw -- uncatchable exceptions when given empty lists. This package provides -- safe alternatives for such functions based on MonadThrow which can -- provide a variety of failure cases: Nothing, IOException, Left, etc. @package listsafe @version 0.1.0.0 -- | Operations on lists. This module re-exports all safe functions of -- List, but wraps all partial functions which may fail. As such, -- this module can be imported instead of Data.List. -- -- Partial functions are wrapped into the MonadThrow-monad from -- Control.Monad.Catch and as such, have appropriate failure cases -- for all instances. E.g.: -- -- module Data.List.Safe -- | Extract the first element of a list. Empty lists throw an -- EmptyListException. head :: MonadThrow m => [a] -> m a -- | Extract the last element of a list. Empty lists throw an -- EmptyListException. last :: MonadThrow m => [a] -> m a -- | Extract the elements after the head of a list. Empty lists throw an -- EmptyListException. tail :: MonadThrow m => [a] -> m [a] -- | Return all the elements of a list except the last one. Empty lists -- throw an EmptyListException. init :: MonadThrow m => [a] -> m [a] -- | foldl1 is a variant of foldl that has no starting value, -- and thus must be applied to non-empty lists. Empty lists throw an -- EmptyListException. foldl1 :: MonadThrow m => (a -> a -> a) -> [a] -> m a -- | A strict version of foldl1. foldl1' :: MonadThrow m => (a -> a -> a) -> [a] -> m a -- | foldr1 is a variant of foldr that has no starting value, -- and thus must be applied to non-empty lists. Empty lists throw an -- EmptyListException. foldr1 :: MonadThrow m => (a -> a -> a) -> [a] -> m a -- | maximum returns the maximum value from a list, which must be -- non-empty, finite, and of an ordered type. It is a special case of -- maximumBy, which allows the programmer to supply their own -- comparison function. Empty lists throw an EmptyListException. maximum :: (MonadThrow m, Ord a) => [a] -> m a -- | minimum returns the maximum value from a list, which must be -- non-empty, finite, and of an ordered type. It is a special case of -- minimumBy, which allows the programmer to supply their own -- comparison function. Empty lists throw an EmptyListException. minimum :: (MonadThrow m, Ord a) => [a] -> m a -- | The maximumBy function takes a comparison function and a list -- and returns the greatest element of the list by the comparison -- function. The list must be finite and non-empty. Empty lists throw an -- EmptyListException. maximumBy :: MonadThrow m => (a -> a -> Ordering) -> [a] -> m a -- | The minimumBy function takes a comparison function and a list -- and returns the least element of the list by the comparison function. -- The list must be finite and non-empty. Empty lists throw an -- EmptyListException. minimumBy :: MonadThrow m => (a -> a -> Ordering) -> [a] -> m a -- | List index (subscript) operator, starting from 0. Indices larger than -- length xs - 1 throw an EmptyListException, negative -- indices throw an NegativeIndexException. (!!) :: (MonadThrow m, Integral n, Num n) => [a] -> n -> m a -- | Takes a function that requires a non-empty list and wraps it in an -- instance of MonadThrow. For empty lists, an -- EmptyListException is thrown. wrap :: MonadThrow m => ([a] -> b) -> [a] -> m b -- | Signals that the list was empty or contained too few elements (in the -- case or access by index). data EmptyListException EmptyListException :: EmptyListException -- | Singals that an element with a negative index was accessed. data NegativeIndexException NegativeIndexException :: NegativeIndexException instance Typeable EmptyListException instance Typeable NegativeIndexException instance Show EmptyListException instance Read EmptyListException instance Eq EmptyListException instance Ord EmptyListException instance Show NegativeIndexException instance Read NegativeIndexException instance Eq NegativeIndexException instance Ord NegativeIndexException instance Exception NegativeIndexException instance Exception EmptyListException