The IO type has moved to GHC.Types in ghc-prim
authorIan Lynagh <igloo@earth.li>
Sat, 20 Jun 2009 15:52:38 +0000 (15:52 +0000)
committerIan Lynagh <igloo@earth.li>
Sat, 20 Jun 2009 15:52:38 +0000 (15:52 +0000)
GHC/Types.hs

index f25978c..8040fec 100644 (file)
@@ -1,7 +1,7 @@
 
 {-# OPTIONS_GHC -XNoImplicitPrelude #-}
 
-module GHC.Types (Char(..), Int(..), Float(..), Double(..)) where
+module GHC.Types (Char(..), Int(..), Float(..), Double(..), IO(..)) where
 
 import GHC.Prim
 -- We need Inl etc behind the scenes for the type definitions
@@ -28,3 +28,18 @@ data Float      = F# Float#
 -- to the IEEE double-precision type.
 data Double     = D# Double#
 
+{-|
+A value of type @'IO' a@ is a computation which, when performed,
+does some I\/O before returning a value of type @a@.
+
+There is really only one way to \"perform\" an I\/O action: bind it to
+@Main.main@ in your program.  When your program is run, the I\/O will
+be performed.  It isn't possible to perform I\/O from an arbitrary
+function, unless that function is itself in the 'IO' monad and called
+at some point, directly or indirectly, from @Main.main@.
+
+'IO' is a monad, so 'IO' actions can be combined using either the do-notation
+or the '>>' and '>>=' operations from the 'Monad' class.
+-}
+newtype IO a = IO (State# RealWorld -> (# State# RealWorld, a #))
+