Bulat Ziganshin wrote:
Hello Chris,

Saturday, August 12, 2006, 4:05:44 AM, you wrote:

Nine Base Monads:
   IO STM ST ST.Lazy GenParser [] Maybe Either (->)

Seven MonadTrans:
   ListT ContT ErrorT ReaderT StateT WriterT RWST

i'm not sure, but isn't Id monad also required for completeness?


Yes, Identity is required for completeness. And I have added to http://haskell.org/haskellwiki/NewMonads#MonadBase this definition:

-- One can recover MonadIO and liftIO from MonadBase
class (MonadBase IO m) => MonadIO' m where
  liftIO' :: IO a -> m a
  liftIO' = liftBase

Of course, the above is unneeded since you can always write liftBase instead of liftIO.

>...
at least it's included in MonadLib by Iavor S. Diatchki:
http://www.csee.ogi.edu/~diatchki/monadLib/monadLib-2.0.tar.gz


Hah...I knew someone else had done this. Also, there is 2.0.1 version of monadLib at http://www.cse.ogi.edu/~diatchki/monadLib/

His version is called BaseM, and uses a fundep:

-- | Provides means to execute a computation in the base of a tower of monads.
class (Monad m, Monad b) => BaseM m b | m -> b where
  inBase           :: b a -> m a

instance BaseM IO IO        where inBase x = x
instance BaseM [] []        where inBase x = x
instance BaseM Maybe Maybe  where inBase x = x


I am not sure I like the "inBase" name. I think "fromBase" might be a better match to its type. The "inBase" seems more like "toBase" which is backwards.

My small test did not need the fundep, and I wonder if there is some creative example that shows either that the fundep is useful or a counter example that shows something very very clever that would otherwise violate the fundep.

I *might* be able to imagine a transformer stack that pretends to have different base monads.

am i correctly understand that your module is update on Monad
transformers lib already included in GHC?

Essentially, that is exactly what it is.  It completely replaces MonadIO.

--
Chris
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to