{-# OPTIONS_GHC -Wall -fwarn-tabs #-}
----------------------------------------------------------------
--                                                  ~ 2010.04.05
-- |
-- Module      :  Data.List.Extras
-- Copyright   :  Copyright (c) 2007--2012 wren ng thornton
-- License     :  BSD3
-- Maintainer  :  wren@community.haskell.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 _ z []     = z
list f _ (x:xs) = f x xs

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