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

Gregory Wright gwright at comcast.net
Thu Aug 24 21:45:18 EDT 2006


Hi Chris!


On Aug 24, 2006, at 7:28 PM, Chris Kuklewicz wrote:

>>> 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.

I have no objection to good plumbing (I have some in my house).
I just usually like it to be out of sight in the wall or under the  
floor.

Which does lead to a mess in the case of leaks.... ;-)

Metaphorically,
Greg

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



More information about the Haskell-Cafe mailing list