[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