[commit: haskell2010] master: Make splitAt conform to Haskell 98/2010 (fixes #1182). (72baf1e)
Ian Lynagh
igloo at earth.li
Sun Jun 26 23:15:26 CEST 2011
Repository : ssh://darcs.haskell.org//srv/darcs/packages/haskell2010
On branch : master
http://hackage.haskell.org/trac/ghc/changeset/72baf1ec30a09b7b40dda244cd4dc588790da862
>---------------------------------------------------------------
commit 72baf1ec30a09b7b40dda244cd4dc588790da862
Author: Michal Terepeta <michal.terepeta at gmail.com>
Date: Mon Jun 20 21:06:20 2011 +0200
Make splitAt conform to Haskell 98/2010 (fixes #1182).
>---------------------------------------------------------------
Data/List.hs | 2 +-
Prelude.hs | 23 ++++++++++++++++++++++-
2 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/Data/List.hs b/Data/List.hs
index 8258663..78f633f 100644
--- a/Data/List.hs
+++ b/Data/List.hs
@@ -181,4 +181,4 @@ module Data.List (
, genericReplicate -- :: (Integral a) => a -> b -> [b]
) where
-import "base" Data.List
+import "base" Data.List hiding ( splitAt )
diff --git a/Prelude.hs b/Prelude.hs
index 9be6ccf..72e53d2 100644
--- a/Prelude.hs
+++ b/Prelude.hs
@@ -137,7 +137,7 @@ import qualified "base" Control.Exception.Base as New (catch)
import "base" Control.Monad
import "base" System.IO
import "base" System.IO.Error (IOError, ioError, userError)
-import "base" Data.List
+import "base" Data.List hiding ( splitAt )
import "base" Data.Either
import "base" Data.Maybe
import "base" Data.Tuple
@@ -216,3 +216,24 @@ gcd 0 0 = error "Prelude.gcd: gcd 0 0 is undefined"
gcd x y = GHC.Real.gcd x y
#endif
+#ifndef __HUGS__
+-- The GHC's version of 'splitAt' is too strict in 'n' compared to
+-- Haskell98/2010 version. Ticket #1182.
+
+-- | 'splitAt' @n xs@ returns a tuple where first element is @xs@ prefix of
+-- length @n@ and second element is the remainder of the list:
+--
+-- > splitAt 6 "Hello World!" == ("Hello ","World!")
+-- > splitAt 3 [1,2,3,4,5] == ([1,2,3],[4,5])
+-- > splitAt 1 [1,2,3] == ([1],[2,3])
+-- > splitAt 3 [1,2,3] == ([1,2,3],[])
+-- > splitAt 4 [1,2,3] == ([1,2,3],[])
+-- > splitAt 0 [1,2,3] == ([],[1,2,3])
+-- > splitAt (-1) [1,2,3] == ([],[1,2,3])
+--
+-- It is equivalent to @('take' n xs, 'drop' n xs)@.
+-- 'splitAt' is an instance of the more general 'Data.List.genericSplitAt',
+-- in which @n@ may be of any integral type.
+splitAt :: Int -> [a] -> ([a],[a])
+splitAt n xs = (take n xs, drop n xs)
+#endif
More information about the Cvs-libraries
mailing list