Add Data.List.uncons
authorDavid Feuer <david.feuer@gmail.com>
Thu, 4 Sep 2014 06:04:12 +0000 (08:04 +0200)
committerJoachim Breitner <mail@joachim-breitner.de>
Thu, 4 Sep 2014 06:07:22 +0000 (08:07 +0200)
Summary:
As discussed in
http://www.haskell.org/pipermail/libraries/2014-July/023314.html and
submitted at #9550.

Test Plan: Submit to phab, see what happens.

Reviewers: austin

Subscribers: simonmar, ezyang, carter

Differential Revision: https://phabricator.haskell.org/D195

GHC Trac Issues: #9550

libraries/base/Data/List.hs
libraries/base/GHC/List.lhs

index 2cd9a3b..f813741 100644 (file)
@@ -24,6 +24,7 @@ module Data.List
    , last
    , tail
    , init
+   , uncons
    , null
    , length
 
index bcc5fea..4fcb54a 100644 (file)
@@ -21,7 +21,7 @@ module GHC.List (
    -- [] (..),          -- built-in syntax; can't be used in export list
 
    map, (++), filter, concat,
-   head, last, tail, init, null, length, (!!),
+   head, last, tail, init, uncons, null, length, (!!),
    foldl, scanl, scanl1, foldr, foldr1, scanr, scanr1,
    iterate, repeat, replicate, cycle,
    take, drop, splitAt, takeWhile, dropWhile, span, break,
@@ -71,6 +71,13 @@ badHead = errorEmptyList "head"
                 head (augment g xs) = g (\x _ -> x) (head xs)
  #-}
 
+-- | Decompose a list into its head and tail. If the list is empty,
+-- returns 'Nothing'. If the list is non-empty, returns @'Just' (x, xs)@,
+-- where @x@ is the head of the list and @xs@ its tail.
+uncons                  :: [a] -> Maybe (a, [a])
+uncons []               = Nothing
+uncons (x:xs)           = Just (x, xs)
+
 -- | Extract the elements after the head of a list, which must be non-empty.
 tail                    :: [a] -> [a]
 tail (_:xs)             =  xs