Add an ID monad to MonadUtils (used in kind checking)
authorsimonpj@microsoft.com <unknown>
Thu, 12 Nov 2009 09:22:54 +0000 (09:22 +0000)
committersimonpj@microsoft.com <unknown>
Thu, 12 Nov 2009 09:22:54 +0000 (09:22 +0000)
compiler/utils/MonadUtils.hs

index 9b364ae..5e01a22 100644 (file)
@@ -8,6 +8,8 @@ module MonadUtils
         
         , MonadFix(..)
         , MonadIO(..)
+       
+       , ID, runID
         
         , liftIO1, liftIO2, liftIO3, liftIO4
 
@@ -22,6 +24,8 @@ module MonadUtils
         , maybeMapM
         ) where
 
+import Outputable 
+
 ----------------------------------------------------------------------------------------
 -- Detection of available libraries
 ----------------------------------------------------------------------------------------
@@ -43,6 +47,20 @@ import Control.Monad
 import Control.Monad.Fix
 
 ----------------------------------------------------------------------------------------
+-- The ID monad
+----------------------------------------------------------------------------------------
+
+newtype ID a = ID a
+instance Monad ID where
+  return x     = ID x
+  (ID x) >>= f = f x
+  _ >> y       = y
+  fail s       = panic s
+
+runID :: ID a -> a
+runID (ID x) = x
+
+----------------------------------------------------------------------------------------
 -- MTL
 ----------------------------------------------------------------------------------------