{-# OPTIONS_GHC -Wall -fwarn-tabs #-}
----------------------------------------------------------------
--                                                  ~ 2021.10.17
-- |
-- Module      :  Data.List.Extras
-- Copyright   :  Copyright (c) 2007--2021 wren gayle romano
-- License     :  BSD3
-- Maintainer  :  wren@cpan.org
-- Stability   :  stable
-- Portability :  Haskell98
--
-- This module provides a single header for all @Data.List.Extras.*@
-- modules and provides a small number of other utility functions.
----------------------------------------------------------------

module Data.List.Extras
    (
      list
    , module Data.List.Extras.LazyLength
    , module Data.List.Extras.Pair
    , module Data.List.Extras.Argmax
    ) where

import Data.List.Extras.LazyLength
import Data.List.Extras.Pair
import Data.List.Extras.Argmax

-- | Pattern matching for lists, as a first-class function. (Could
-- also be considered as a non-recursive 'foldr'.) If the list
-- argument is @[]@ then the default argument is returned; otherwise
-- the function is called with the head and tail of the list.
list :: (a -> [a] -> b) -> b -> [a] -> b
list :: (a -> [a] -> b) -> b -> [a] -> b
list a -> [a] -> b
_ b
z []     = b
z
list a -> [a] -> b
f b
_ (a
x:[a]
xs) = a -> [a] -> b
f a
x [a]
xs

----------------------------------------------------------------
----------------------------------------------------------- fin.