X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Foreign%2FMarshal%2FError.hs;h=ccf514d70d223ee0c1a34ba945f8d9c2db111dc8;hb=41e8fba828acbae1751628af50849f5352b27873;hp=889ab657d708fe8221ba7d7d703eb56c59c1564d;hpb=771f9ba7d06cd1b454d4bf2b133a028887a4d2af;p=ghc-base.git diff --git a/Foreign/Marshal/Error.hs b/Foreign/Marshal/Error.hs index 889ab65..ccf514d 100644 --- a/Foreign/Marshal/Error.hs +++ b/Foreign/Marshal/Error.hs @@ -1,29 +1,27 @@ -{-# OPTIONS -fno-implicit-prelude #-} +{-# LANGUAGE CPP, NoImplicitPrelude #-} + ----------------------------------------------------------------------------- -- | -- Module : Foreign.Marshal.Error -- Copyright : (c) The FFI task force 2001 --- License : BSD-style (see the file libraries/core/LICENSE) +-- License : BSD-style (see the file libraries/base/LICENSE) -- -- Maintainer : ffi@haskell.org -- Stability : provisional -- Portability : portable -- --- Marshalling support: Handling of common error conditions +-- Routines for testing return values and raising a 'userError' exception +-- in case of values indicating an error state. -- ----------------------------------------------------------------------------- module Foreign.Marshal.Error ( - -- * Error utilities - - -- |Throw an exception on specific return values - -- throwIf, -- :: (a -> Bool) -> (a -> String) -> IO a -> IO a throwIf_, -- :: (a -> Bool) -> (a -> String) -> IO a -> IO () throwIfNeg, -- :: (Ord a, Num a) - -- => (a -> String) -> IO a -> IO a + -- => (a -> String) -> IO a -> IO a throwIfNeg_, -- :: (Ord a, Num a) - -- => (a -> String) -> IO a -> IO () + -- => (a -> String) -> IO a -> IO () throwIfNull, -- :: String -> IO (Ptr a) -> IO (Ptr a) -- Discard return value @@ -34,21 +32,28 @@ module Foreign.Marshal.Error ( import Foreign.Ptr #ifdef __GLASGOW_HASKELL__ +#ifdef __HADDOCK__ +import Data.Bool +import System.IO.Error +#endif import GHC.Base import GHC.Num -import GHC.IOBase +-- import GHC.IO +import GHC.IO.Exception #endif -- exported functions -- ------------------ --- |Guard an 'IO' operation and throw an exception if the result meets the given --- predicate --- --- * the second argument computes an error message from the result of the 'IO' --- operation +-- |Execute an 'IO' action, throwing a 'userError' if the predicate yields +-- 'True' when applied to the result returned by the 'IO' action. +-- If no exception is raised, return the result of the computation. -- -throwIf :: (a -> Bool) -> (a -> String) -> IO a -> IO a +throwIf :: (a -> Bool) -- ^ error condition on the result of the 'IO' action + -> (a -> String) -- ^ computes an error message from erroneous results + -- of the 'IO' action + -> IO a -- ^ the 'IO' action to be executed + -> IO a throwIf pred msgfct act = do res <- act