Re: [Haskell-cafe] Pesky monads...

2007-05-19 Thread Matthew Cox
You can define one:

untilM :: Monad m = (a - Bool) - (a - m a) - a - m a
untilM pred f x | pred x = return x
| otherwise = f x = untilM pred f

Matthew Cox

- Original Message -
From: Andrew Coppin
To:  haskell-cafe@haskell.org
Sent:  Sat, 19 May 2007 19:49:40 +0100
Subject: [Haskell-cafe] Pesky monads...

I've been getting some pretty weird complaints from the type checker. 
And I just figured out why! Grr...

Is there any function that does the same thing as until, but in a monad?

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

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


Re: [Haskell-cafe] Pesky monads...

2007-05-19 Thread Matthew Cox
It occurred to me that the predicate will generally be a monadic function 
itself, so here's a
refined version:

 :: Monad m = (a - m Bool) - (a - m a) - a - m a
untilM pred f x = do c - pred x
 if c then return x
  else f x = untilM pred f

Think of a computation in the State monad, a predicate will probably want to 
consult that state.

Matthew Cox

- Original Message -
From: Matthew Cox
To:  haskell-cafe@haskell.org
Sent:  Sat, 19 May 2007 13:10:40 -0600
Subject: Re: [Haskell-cafe] Pesky monads...

You can define one:

untilM :: Monad m = (a - Bool) - (a - m a) - a - m a
untilM pred f x | pred x = return x
| otherwise = f x = untilM pred f

Matthew Cox

- Original Message -
From: Andrew Coppin
To:  haskell-cafe@haskell.org
Sent:  Sat, 19 May 2007 19:49:40 +0100
Subject: [Haskell-cafe] Pesky monads...

I've been getting some pretty weird complaints from the type checker. 
And I just figured out why! Grr...

Is there any function that does the same thing as until, but in a monad?

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

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