[Haskell-cafe] style question: Writer monad or unsafeIOToST?

Chris Kuklewicz haskell at list.mightyreason.com
Thu Aug 24 19:28:50 EDT 2006


>> class Ref m r | m->r where
>>   newRef
>>   readRef
>>   writeRef
>>
>> instance Ref IO IORef
>>   writeRef r x = writeIORef r $! x
>>
>> instance (Ref m r) => Ref (WriterT m) r where
>>   writeRef = lift . writeRef
>>
>> and so on...
>>
> 
> The code snippet above looks like a very good idea.  The monad
> dependent operations combined with "lift" seem more complicated
> than necessary.  "lift" in particular often seems like plumbing that
> should not be necessary.
> 
> Best Wishes,
> Greg
> 

Well, lift is the common plumbing that lets you build writeRef and liftIO.  So 
it is an intermediate invention.  In fact it is the only thing in MonadTrans:

class MonadTrans (t::(* -> *) -> * -> *) where
   lift :: forall (m::* -> *) a. Monad m => m a -> t m a
         -- Imported from Control.Monad.Trans


You are supposed to make higher level shorthand and abstractions from it.

But it helps to learn how the plumbing works.


More information about the Haskell-Cafe mailing list