[Haskell-cafe] Merry monad mixup?

michael rice nowgate at yahoo.com
Fri Jan 28 20:51:15 CET 2011

So, my suspicions are confirmed.

Thanks, all.


--- On Fri, 1/28/11, Daniel Peebles <pumpkingod at gmail.com> wrote:

From: Daniel Peebles <pumpkingod at gmail.com>
Subject: Re: [Haskell-cafe] Merry monad mixup?
To: "Chris Smith" <cdsmith at gmail.com>
Cc: "michael rice" <nowgate at yahoo.com>, "haskell cafe" <haskell-cafe at haskell.org>
Date: Friday, January 28, 2011, 2:47 PM

And by "works", I mean, ListT is is a monad only if the internal monad is commutative.

On Fri, Jan 28, 2011 at 2:46 PM, Daniel Peebles <pumpkingod at gmail.com> wrote:

Beware of ListT. It only works if your internal monad is commutative, which IO is not. (Maybe would work, for example)

On Fri, Jan 28, 2011 at 2:41 PM, Chris Smith <cdsmith at gmail.com> wrote:

On Fri, 2011-01-28 at 11:20 -0800, michael rice wrote:

> The first and third work, but not the second. Why?

When you use a do block, it can be the syntactic sugar for whatever

monad you like; but you do have to make a choice.  Your first example

had a do block for the IO monad.  Your third example used the [] monad.

Both are fine.

The second, though, wasn't clear on what monad it was using.  When you

used the (<-) syntax to nondeterministically choose from a list, the

compiler settled upon the [] monad.  But then the next line was a

statement in the IO monad.  That's inconsistent, hence the error.

Perhaps you wanted to build a monad out of both behaviors?  In this

case, you should likely look into monad transformers, and in particular,

the ListT monad transformer in the List package.  This would allow you

to write the code you did in a monad called ListT IO, except that the IO

actions would need to be lifted through the use of either `lift` or



Chris Smith


Haskell-Cafe mailing list

Haskell-Cafe at haskell.org


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20110128/51057c99/attachment.htm>

More information about the Haskell-Cafe mailing list