X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=GHC%2FTypes.hs;h=8040fec3a44ee4e6d75979ca35300a8c68a81914;hb=a5e24955ea9e3bfb971a3d9523e01893049e4d7e;hp=f25978c175695d2b1dfd83b8e54e728c728fbb28;hpb=a19a1b386c04d9a33348dedbd72f58798fdac10b;p=ghc-prim.git 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 #)) +