[commit: base] master: Add GHCi monad. Experimental for now. (a786d35)

David Terei davidterei at gmail.com
Wed Apr 25 02:14:31 CEST 2012


Repository : ssh://darcs.haskell.org//srv/darcs/packages/base

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/a786d35bf30670060492434a80331e7ab6f5eb2c

>---------------------------------------------------------------

commit a786d35bf30670060492434a80331e7ab6f5eb2c
Author: David Terei <davidterei at gmail.com>
Date:   Tue Apr 24 16:16:48 2012 -0700

    Add GHCi monad. Experimental for now.

>---------------------------------------------------------------

 GHC/GHCi.hs |   44 ++++++++++++++++++++++++++++++++++++++++++++
 base.cabal  |    1 +
 2 files changed, 45 insertions(+), 0 deletions(-)

diff --git a/GHC/GHCi.hs b/GHC/GHCi.hs
new file mode 100644
index 0000000..213a7c5
--- /dev/null
+++ b/GHC/GHCi.hs
@@ -0,0 +1,44 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK hide #-}
+
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  GHC.GHCi
+-- Copyright   :  (c) The University of Glasgow 2012
+-- License     :  see libraries/base/LICENSE
+--
+-- Maintainer  :  cvs-ghc at haskell.org
+-- Stability   :  internal
+-- Portability :  non-portable (GHC Extensions)
+--
+-- The GHCi Monad lifting interface.
+--
+-- EXPERIMENTAL! DON'T USE.
+--
+-----------------------------------------------------------------------------
+
+-- #hide
+module GHC.GHCi {-# WARNING "This is an unstable interface." #-} (
+        GHCiSandboxIO(..), NoIO()
+    ) where
+
+import GHC.Base (IO(), Monad, (>>=), return, id, (.))
+
+-- | A monad that can execute GHCi statements by lifting them out of
+-- m into the IO monad. (e.g state monads)
+class (Monad m) => GHCiSandboxIO m where
+    ghciStepIO :: m a -> IO a
+
+instance GHCiSandboxIO IO where
+    ghciStepIO = id
+
+-- | A monad that doesn't allow any IO.
+newtype NoIO a = NoIO { noio :: IO a }
+
+instance Monad NoIO where
+    return a  = NoIO (return a)
+    (>>=) k f = NoIO (noio k >>= noio . f)
+
+instance GHCiSandboxIO NoIO where
+    ghciStepIO = noio
+
diff --git a/base.cabal b/base.cabal
index f0d4186..ea553d2 100644
--- a/base.cabal
+++ b/base.cabal
@@ -58,6 +58,7 @@ Library {
             GHC.Float.RealFracMethods,
             GHC.Foreign,
             GHC.ForeignPtr,
+            GHC.GHCi,
             GHC.Handle,
             GHC.IO,
             GHC.IO.Buffer,





More information about the Cvs-libraries mailing list