From: Ian Lynagh Date: Sat, 20 Jun 2009 15:52:38 +0000 (+0000) Subject: The IO type has moved to GHC.Types in ghc-prim X-Git-Url: http://git.megacz.com/?p=ghc-prim.git;a=commitdiff_plain;h=a5e24955ea9e3bfb971a3d9523e01893049e4d7e The IO type has moved to GHC.Types in ghc-prim --- diff --git a/GHC/Types.hs b/GHC/Types.hs index f25978c..8040fec 100644 --- a/GHC/Types.hs +++ b/GHC/Types.hs @@ -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 #)) +