[project @ 1996-06-27 16:55:06 by partain]
[ghc-hetmet.git] / ghc / lib / prelude / GHCmain.hs
diff --git a/ghc/lib/prelude/GHCmain.hs b/ghc/lib/prelude/GHCmain.hs
new file mode 100644 (file)
index 0000000..bb8f19f
--- /dev/null
@@ -0,0 +1,29 @@
+-- This is the mainPrimIO that must be used for Haskell~1.3.
+
+module GHCmain ( mainPrimIO ) where
+
+import qualified Main  -- for type of "Main.main"
+import GHCbase
+
+mainPrimIO :: PrimIO ()
+
+mainPrimIO = ST $ \ s ->
+    case Main.main   of { IO (ST main_guts) ->
+    case main_guts s of { (result, s2@(S# _)) ->
+    case result   of
+      Right ()  -> ( (), s2 )
+      Left  err -> error ("I/O error: "++showsPrec 0 err "\n")
+    }}
+
+{-
+OLD COMMENT:
+
+Nota Bene!  @mainIO@ is written as an explicit function, rather than
+by saying: @mainIO = requestToIO main@ so that the code generator
+recognises @mainIO@ as a {\em function} (hence HNF, hence not
+updatable), rather than a zero-arity CAF (hence updatable).  If it is
+updated, then we have a mega-space leak, because the entire action
+(@requestToIO main@) is retained indefinitely.
+
+(This doesn't waste work because @mainIO@ is only used once.)
+-}