Thanks for an excellent clarification.  I have been known to be rather
daft at times so I just wanted to make sure I understood everything
correctly.  Thanks!

/M

On Sun, Jan 28, 2007 at 12:56:56 +0200, Yitzchak Gale wrote:
>Hi Magnus,
>
>You wrote:
>>This piece has type problems.  I couldn't get ghci to
>>accept it without making some changes...
>
>You are absolutely correct, and I apologize for the errors.
>I will try one more time to give a corrected version below.
>
>Let me point out, though, that this does not exactly solve the
>problem you originally stated. Here is a summary and
>clarification of what we have come up with together so far:
>
>First, I said that it sounds like what you really want is ListT.
>
>But you pointed out that my ListT solution gave you the wrong
>order of interaction.
>
>The reason for this problem is a bug in the implementation
>of ListT in the standard libraries, which is explained on the
>wiki page:
>
>http://www.haskell.org/haskellwiki/ListT_done_right
>
>Dan Piponi posted a solution to your problem that works
>the way you want it, and without unsafeInterleaveIO.
>Dan's solution is just ListT in disguise, except that Dan
>used the corrected form of ListT like on the wiki page.
>
>My code in which you found the errors is a translation
>of Dan's solution back into ListT notation. So if you
>use that with the broken ListT currently in the standard
>libraries, you'll go back to the problem we had at the
>beginning.
>
>Here is the bottom line:
>
>You can solve your problem - without unsafeInterleaveIO -
>either by using one of the corrected versions of ListT
>listed on the wiki page, or by writing out an implementation
>of ListT that is hard-wired for your application like Dan
>did.
>
>OK, so here is my translation of Dan's code back
>into ListT notation again. I hope this version is now correct:
>
>test = do
>a <- liftIO getChar
>guard $ a /= 'q'
>return a `mplus` test
>
>test2 = (>>= liftIO . print)
>
>Run it with:
>
>runListT $ test2 test
>
>Note that you probably want putChar instead of print.
>Also, Dan's version drops the 'q' at the end, while
>your code prints the 'q'.
>
>Hope this helps.
>
>Regards,
>Yitz
>_______________________________________________
>Haskell-Cafe mailing list
>Haskell-Cafe@haskell.org
>http://www.haskell.org/mailman/listinfo/haskell-cafe

-- 
Magnus Therning                             (OpenPGP: 0xAB4DFBA4)
[EMAIL PROTECTED]             Jabber: [EMAIL PROTECTED]
http://therning.org/magnus

Attachment: pgpZFVotyhqve.pgp
Description: PGP signature

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

Reply via email to