X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Prelude.hs;h=4c183ae38c9ad44a22a25c4bba5fa9149066cb62;hb=7dbb606d7b57cdad87a0ffbdb6ea4a274ebca7c0;hp=4f01b9ffc3f9e867832001c54e89d0ec536e675d;hpb=c1f3c4852894174a3f7b855b29e8a42f60d4c019;p=ghc-base.git diff --git a/Prelude.hs b/Prelude.hs index 4f01b9f..4c183ae 100644 --- a/Prelude.hs +++ b/Prelude.hs @@ -1,4 +1,5 @@ -{-# OPTIONS_GHC -XNoImplicitPrelude #-} +{-# LANGUAGE CPP, NoImplicitPrelude, BangPatterns #-} + ----------------------------------------------------------------------------- -- | -- Module : Prelude @@ -146,6 +147,7 @@ module Prelude ( #ifndef __HUGS__ import Control.Monad import System.IO +import System.IO.Error import Data.List import Data.Either import Data.Maybe @@ -154,18 +156,15 @@ import Data.Tuple #ifdef __GLASGOW_HASKELL__ import GHC.Base -import GHC.IOBase +-- import GHC.IO +-- import GHC.IO.Exception import Text.Read import GHC.Enum import GHC.Num import GHC.Real import GHC.Float import GHC.Show -import GHC.Err ( error, undefined ) -#endif - -#ifndef __HUGS__ -import qualified Control.Exception.Base as New (catch) +import GHC.Err ( undefined ) #endif #ifdef __HUGS__ @@ -174,12 +173,16 @@ import Hugs.Prelude #ifndef __HUGS__ infixr 0 $! +#endif -- ----------------------------------------------------------------------------- -- Miscellaneous functions -- | Strict (call-by-value) application, defined in terms of 'seq'. ($!) :: (a -> b) -> a -> b +#ifdef __GLASGOW_HASKELL__ +f $! x = let !vx = x in f vx -- see #2273 +#elif !defined(__HUGS__) f $! x = x `seq` f x #endif @@ -190,26 +193,3 @@ f $! x = x `seq` f x seq :: a -> b -> b seq _ y = y #endif - -#ifndef __HUGS__ --- | The 'catch' function establishes a handler that receives any 'IOError' --- raised in the action protected by 'catch'. An 'IOError' is caught by --- the most recent handler established by 'catch'. These handlers are --- not selective: all 'IOError's are caught. Exception propagation --- must be explicitly provided in a handler by re-raising any unwanted --- exceptions. For example, in --- --- > f = catch g (\e -> if IO.isEOFError e then return [] else ioError e) --- --- the function @f@ returns @[]@ when an end-of-file exception --- (cf. 'System.IO.Error.isEOFError') occurs in @g@; otherwise, the --- exception is propagated to the next outer handler. --- --- When an exception propagates outside the main program, the Haskell --- system prints the associated 'IOError' value and exits the program. --- --- Non-I\/O exceptions are not caught by this variant; to catch all --- exceptions, use 'Control.Exception.catch' from "Control.Exception". -catch :: IO a -> (IOError -> IO a) -> IO a -catch = New.catch -#endif /* !__HUGS__ */