[commit: base] master: Less strict inits and tails (f5937ed)

Repository : ssh://darcs.haskell.org//srv/darcs/packages/base On branch : master http://hackage.haskell.org/trac/ghc/changeset/f5937ede7984724880a82d6bab56f8...
---------------------------------------------------------------
commit f5937ede7984724880a82d6bab56f81a5b1e1f80
Author: Ian Lynagh
---------------------------------------------------------------
Data/List.hs | 15 ++++++++++----- 1 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Data/List.hs b/Data/List.hs index 061ad42..bb71da5 100644 --- a/Data/List.hs +++ b/Data/List.hs @@ -744,19 +744,24 @@ groupBy eq (x:xs) = (x:ys) : groupBy eq zs -- -- > inits "abc" == ["","a","ab","abc"] -- +-- Note that 'inits' has the following strictness property: +-- @inits _|_ = [] : _|_@ inits :: [a] -> [[a]] -inits [] = [[]] -inits (x:xs) = [[]] ++ map (x:) (inits xs) +inits xs = [] : case xs of + [] -> [] + x : xs' -> map (x :) (inits xs') -- | The 'tails' function returns all final segments of the argument, -- longest first. For example, -- -- > tails "abc" == ["abc", "bc", "c",""] -- +-- Note that 'tails' has the following strictness property: +-- @tails _|_ = _|_ : _|_@ tails :: [a] -> [[a]] -tails [] = [[]] -tails xxs@(_:xs) = xxs : tails xs - +tails xs = xs : case xs of + [] -> [] + _ : xs' -> tails xs' -- | The 'subsequences' function returns the list of all subsequences of the argument. --
participants (1)
-
Ian Lynagh