[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