[project @ 2000-12-05 12:09:43 by sewardj]
[ghc-hetmet.git] / ghc / compiler / utils / Util.lhs
index 471089d..cb2c5b6 100644 (file)
@@ -24,6 +24,9 @@ module Util (
        -- for-loop
        nTimes,
 
+       -- maybe-ish
+       unJust,
+
        -- sorting
        IF_NOT_GHC(quicksort COMMA stableSortLt COMMA mergesort COMMA)
        sortLt,
@@ -37,7 +40,7 @@ module Util (
        mapAccumL, mapAccumR, mapAccumB, foldl2, count,
 
        -- comparisons
-       thenCmp, cmpList, prefixMatch, postfixMatch,
+       thenCmp, cmpList, prefixMatch, suffixMatch,
 
        -- strictness
        seqList, ($!),
@@ -65,14 +68,17 @@ module Util (
 
 #include "HsVersions.h"
 
-import IO              ( hPutStrLn, stderr )
 import List            ( zipWith4 )
+import Maybe           ( Maybe(..) )
 import Panic           ( panic )
 import IOExts          ( IORef, newIORef, unsafePerformIO )
 import FastTypes
 #if __GLASGOW_HASKELL__ <= 408
 import Exception       ( catchIO, justIoErrors, raiseInThread )
 #endif
+#ifndef mingw32_TARGET_OS
+import Posix
+#endif
 infixr 9 `thenCmp`
 \end{code}
 
@@ -125,6 +131,17 @@ nTimes 1 f = f
 nTimes n f = f . nTimes (n-1) f
 \end{code}
 
+%************************************************************************
+%*                                                                     *
+\subsection{Maybe-ery}
+%*                                                                     *
+%************************************************************************
+
+\begin{code}
+unJust :: String -> Maybe a -> a
+unJust who (Just x) = x
+unJust who Nothing  = panic ("unJust of Nothing, called by " ++ who)
+\end{code}
 
 %************************************************************************
 %*                                                                     *
@@ -640,8 +657,8 @@ prefixMatch _pat [] = False
 prefixMatch (p:ps) (s:ss) | p == s    = prefixMatch ps ss
                          | otherwise = False
 
-postfixMatch :: Eq a => [a] -> [a] -> Bool
-postfixMatch pat str = prefixMatch (reverse pat) (reverse str)
+suffixMatch :: Eq a => [a] -> [a] -> Bool
+suffixMatch pat str = prefixMatch (reverse pat) (reverse str)
 \end{code}
 
 %************************************************************************
@@ -727,7 +744,6 @@ throwTo   = raiseInThread
 foreign import "_getpid" myGetProcessID :: IO Int 
 #else
 myGetProcessID :: IO Int
-myGetProcessID = do hPutStrLn stderr "Warning:faking process ID in myGetProcessID"
-                    return 12345
+myGetProcessID = Posix.getProcessID
 #endif
 \end{code}