/usr/lib/hugs/packages/hugsbase/Hugs/IOExts.hs is in hugs 98.200609.21-5.3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | -----------------------------------------------------------------------------
-- IO monad extensions:
--
-- Suitable for use with Hugs 98.
-----------------------------------------------------------------------------
module Hugs.IOExts
( unsafePerformIO -- :: IO a -> a
, unsafeInterleaveIO -- :: IO a -> IO a
, performGC
, IOModeEx(..) -- instance (Eq, Read, Show)
, openFileEx -- :: FilePath -> IOModeEx -> IO Handle
, unsafePtrEq
, unsafePtrToInt
, unsafeCoerce
-- backward compatibility with IOExtensions
, readBinaryFile -- :: FilePath -> IO String
, writeBinaryFile -- :: FilePath -> String -> IO ()
, appendBinaryFile -- :: FilePath -> String -> IO ()
, openBinaryFile -- :: FilePath -> IOMode -> IO Handle
, hSetBinaryMode -- :: Handle -> Bool -> IO ()
, hPutBuf -- :: Handle -> Ptr a -> Int -> IO ()
, hGetBuf -- :: Handle -> Ptr a -> Int -> IO Int
, argv -- :: [String]
-- Terminal operations
, hIsTerminalDevice -- :: Handle -> IO Bool
, hGetEcho -- :: Handle -> IO Bool
, hSetEcho -- :: Handle -> Bool -> IO ()
) where
import Hugs.Prelude
import Hugs.IO
import Hugs.System ( getArgs )
import Hugs.Ptr ( Ptr )
-----------------------------------------------------------------------------
primitive performGC "primGC" :: IO ()
unsafePerformIO :: IO a -> a
unsafePerformIO m = valueOf (basicIORun m)
unsafeInterleaveIO :: IO a -> IO a
unsafeInterleaveIO m = IO (\ s -> s (unsafePerformIO m))
primitive unsafePtrEq :: a -> a -> Bool
primitive unsafePtrToInt :: a -> Int
primitive unsafeCoerce "primUnsafeCoerce" :: a -> b
valueOf :: IOFinished a -> a
valueOf (Finished_Return a) = a
valueOf _ = error "IOExts.valueOf: thread failed" -- shouldn't happen
-----------------------------------------------------------------------------
-- Binary files
-----------------------------------------------------------------------------
data IOModeEx
= BinaryMode IOMode
| TextMode IOMode
deriving (Eq, Read, Show)
openFileEx :: FilePath -> IOModeEx -> IO Handle
openFileEx fp m =
case m of
BinaryMode m -> openBinaryFile fp m
TextMode m -> openFile fp m
argv :: [String]
argv = unsafePerformIO getArgs
writeBinaryFile :: FilePath -> String -> IO ()
writeBinaryFile = writeBinaryFile' WriteMode
appendBinaryFile :: FilePath -> String -> IO ()
appendBinaryFile = writeBinaryFile' AppendMode
writeBinaryFile' :: IOMode -> FilePath -> String -> IO ()
writeBinaryFile' mode name s = do
h <- openBinaryFile name mode
catchException (hPutStr h s) (\e -> hClose h >> throw e)
hClose h
readBinaryFile :: FilePath -> IO String
readBinaryFile name = openBinaryFile name ReadMode >>= hGetContents
primitive openBinaryFile :: FilePath -> IOMode -> IO Handle
primitive hSetBinaryMode :: Handle -> Bool -> IO ()
primitive hPutBuf :: Handle -> Ptr a -> Int -> IO ()
primitive hGetBuf :: Handle -> Ptr a -> Int -> IO Int
primitive hIsTerminalDevice :: Handle -> IO Bool
primitive hGetEcho :: Handle -> IO Bool
primitive hSetEcho :: Handle -> Bool -> IO ()
|