diff --git a/ghc/lib/std/PrelList.lhs b/ghc/lib/std/PrelList.lhs index 1d32fd72b94502633bdbe55ca771095fc960bd3b..b1a0b7cf1c7a67a6769eb87bb625e014861bb047 100644 --- a/ghc/lib/std/PrelList.lhs +++ b/ghc/lib/std/PrelList.lhs @@ -22,10 +22,16 @@ module PrelList ( maximum, minimum, concatMap, zip, zip3, zipWith, zipWith3, unzip, unzip3, +#ifdef USE_REPORT_PRELUDE + +#else + -- non-standard, but hidden when creating the Prelude -- export list. takeUInt_append +#endif + ) where import {-# SOURCE #-} PrelErr ( error ) @@ -241,20 +247,20 @@ dropWhile p xs@(x:xs') take :: Int -> [a] -> [a] take 0 _ = [] take _ [] = [] -take n (x:xs) | n > 0 = x : take (n-1) xs +take n (x:xs) | n > 0 = x : take (minusInt n 1) xs take _ _ = errorNegativeIdx "take" drop :: Int -> [a] -> [a] drop 0 xs = xs drop _ [] = [] -drop n (_:xs) | n > 0 = drop (n-1) xs +drop n (_:xs) | n > 0 = drop (minusInt n 1) xs drop _ _ = errorNegativeIdx "drop" splitAt :: Int -> [a] -> ([a],[a]) splitAt 0 xs = ([],xs) splitAt _ [] = ([],[]) -splitAt n (x:xs) | n > 0 = (x:xs',xs'') where (xs',xs'') = splitAt (n-1) xs +splitAt n (x:xs) | n > 0 = (x:xs',xs'') where (xs',xs'') = splitAt (minusInt n 1) xs splitAt _ _ = errorNegativeIdx "splitAt" #else /* hack away */ @@ -429,7 +435,7 @@ concat = foldr (++) [] (!!) :: [a] -> Int -> a #ifdef USE_REPORT_PRELUDE (x:_) !! 0 = x -(_:xs) !! n | n > 0 = xs !! (n-1) +(_:xs) !! n | n > 0 = xs !! (minusInt n 1) (_:_) !! _ = error "Prelude.(!!): negative index" [] !! _ = error "Prelude.(!!): index too large" #else diff --git a/ghc/lib/std/PrelNumExtra.lhs b/ghc/lib/std/PrelNumExtra.lhs index b6a76eb0fb4f06559cbb8b47395931482952313a..9e870c0e08c03053e741d9303c3fcab3de00f043 100644 --- a/ghc/lib/std/PrelNumExtra.lhs +++ b/ghc/lib/std/PrelNumExtra.lhs @@ -569,7 +569,11 @@ prR n r e0 s@(h:t) = show ((round (r * 10^n))::Integer) e = e0+1 +#ifdef USE_REPORT_PRELUDE + takeN n ls rs = take n ls ++ rs +#else takeN (I# n#) ls rs = takeUInt_append n# ls rs +#endif drop0 :: String -> String -> String drop0 [] rs = rs diff --git a/ghc/lib/std/PrelShow.lhs b/ghc/lib/std/PrelShow.lhs index b9ee6233c8bc7ad703bc8d416641662552b8892f..42c6250b4398c379cdc21ff4ee85549ad8237195 100644 --- a/ghc/lib/std/PrelShow.lhs +++ b/ghc/lib/std/PrelShow.lhs @@ -32,7 +32,11 @@ module PrelShow import {-# SOURCE #-} PrelErr ( error ) import PrelBase import PrelMaybe -import PrelList ( (!!), break, dropWhile ) +import PrelList ( (!!), break, dropWhile +#ifdef USE_REPORT_PRELUDE + , concatMap, foldr1 +#endif + ) \end{code} diff --git a/ghc/lib/std/Prelude.lhs b/ghc/lib/std/Prelude.lhs index cf2fb00ed92ac032b4328e4d3941327ee314dafe..401e5ca0a03235ccee7a0aea50801f437701cdde 100644 --- a/ghc/lib/std/Prelude.lhs +++ b/ghc/lib/std/Prelude.lhs @@ -68,7 +68,10 @@ module Prelude ( ) where import PrelBase -import PrelList hiding ( takeUInt_append ) +import PrelList +#ifndef USE_REPORT_PRELUDE + hiding ( takeUInt_append ) +#endif import PrelRead import PrelEnum import PrelNum