Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
jberryman
GHC
Commits
50a3ac89
Commit
50a3ac89
authored
Aug 14, 1998
by
sof
Browse files
[project @ 1998-08-14 13:01:44 by sof]
New functions: unsafeIOToST, hConnectTo
parent
5de97ffe
Changes
2
Hide whitespace changes
Inline
Side-by-side
ghc/lib/exts/GlaExts.lhs
View file @
50a3ac89
...
...
@@ -68,7 +68,7 @@ import PrelIOBase
import ByteArray
import MutableArray
import Monad
import
Foreign
import
PrelCCall ( Word(..) )
type PrimIO a = IO a
primIOToIO io = io
...
...
ghc/lib/exts/IOExts.lhs
View file @
50a3ac89
%
% (c) The AQUA Project, Glasgow University, 1994-1996
%
\section[IOExts]{Module @IOExts@}
@IOExts@ provides useful functionality that fall outside the
standard Haskell IO interface. Expect the contents of IOExts
to be the same for Hugs and GHC (same goes for any other
Hugs/GHC extension libraries, unless a function/type is
explicitly flagged as being implementation specific
extension.)
\begin{code}
{-# OPTIONS -fno-implicit-prelude #-}
...
...
@@ -12,14 +18,12 @@ module IOExts
, unsafePerformIO
, unsafeInterleaveIO
, IORef
-- instance Eq (IORef a)
, IORef -- instance of: Eq
, newIORef
, readIORef
, writeIORef
, IOArray
-- instance Eq (IOArray ix a)
, IOArray -- instance of: Eq
, newIOArray
, boundsIOArray
, readIOArray
...
...
@@ -31,25 +35,34 @@ module IOExts
, hSetEcho
, hGetEcho
, hIsTerminalDevice
, hConnectTo
, trace
, performGC
, reallyUnsafePtrEq
, unsafeIOToST
) where
\end{code}
\begin{code}
import PrelBase
import PrelIOBase
import PrelHandle ( openFileEx, IOModeEx(..),
hSetEcho, hGetEcho
hSetEcho, hGetEcho
, getHandleFd
)
import PrelST
import PrelArr
import PrelGHC
import Ix
import IO
import PrelHandle
import PrelErr
reallyUnsafePtrEq :: a -> a -> Bool
reallyUnsafePtrEq a b =
case reallyUnsafePtrEquality# a b of
0# -> False
...
...
@@ -93,3 +106,30 @@ writeIOArray (IOArray arr) ix elt = stToIO (writeArray arr ix elt)
freezeIOArray (IOArray arr) = stToIO (freezeArray arr)
\end{code}
\begin{code}
{-# NOINLINE trace #-}
trace :: String -> a -> a
trace string expr = unsafePerformIO $ do
fd <- getHandleFd stderr
hPutStrLn stderr string
_ccall_ PostTraceHook fd
return expr
\end{code}
\begin{code}
unsafeIOToST :: IO a -> ST s a
unsafeIOToST (IO io) = ST $ \ s ->
case ((unsafeCoerce# io) s) of
IOok new_s a -> unsafeCoerce# (STret new_s a)
IOfail new_s e -> error ("I/O Error (unsafeIOToST): " ++ showsPrec 0 e "\n")
\end{code}
Not something you want to call normally, but useful
in the cases where you do want to flush stuff out of
the heap or make sure you've got room enough
\begin{code}
performGC :: IO ()
performGC = _ccall_GC_ StgPerformGarbageCollection
\end{code}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment