new MonadRandom instance; and maintainership

Hi all, I would like to add a derived MonadPlus instance for both Rand and RandT. Also, since it seems that MonadRandom has no maintainer I propose to take on its maintainership. Any comments/objections/etc. welcome. -Brent

On Wed, Apr 24, 2013 at 02:38:01PM -0400, Brent Yorgey wrote:
Hi all,
I would like to add a derived MonadPlus instance for both Rand and RandT. Also, since it seems that MonadRandom has no maintainer I propose to take on its maintainership. Any comments/objections/etc. welcome.
Also, ignore what I said about deriving an instance for Rand, that does not make any sense. However, adding an instance for RandT does still make sense. A repository with the changes is here: http://github.com/byorgey/MonadRandom I'll upload in a few days if no one objects. -Brent

On Thu, Apr 25, 2013 at 10:47:57AM -0400, Brent Yorgey wrote:
On Wed, Apr 24, 2013 at 02:38:01PM -0400, Brent Yorgey wrote:
Hi all,
I would like to add a derived MonadPlus instance for both Rand and RandT. Also, since it seems that MonadRandom has no maintainer I propose to take on its maintainership. Any comments/objections/etc. welcome.
Also, ignore what I said about deriving an instance for Rand, that does not make any sense. However, adding an instance for RandT does still make sense. A repository with the changes is here:
http://github.com/byorgey/MonadRandom
I'll upload in a few days if no one objects.
Puzzle time! Can you explain the semantics of the following code (given a derived MonadPlus instance for RandT)? maybeFail :: RandT StdGen Maybe () maybeFail = do r <- getRandomR (0, 1 :: Double) guard (r < 1/2) succeed :: RandT StdGen Maybe () succeed = maybeFail `mplus` succeed I therefore rescind my proposal to add a MonadPlus instance for RandT. However, I still volunteer to be the maintainer. =) -Brent

So if r >= 1/2, then it loops? Ouch!
On Thu, Apr 25, 2013 at 3:28 PM, Brent Yorgey
On Thu, Apr 25, 2013 at 10:47:57AM -0400, Brent Yorgey wrote:
On Wed, Apr 24, 2013 at 02:38:01PM -0400, Brent Yorgey wrote:
Hi all,
I would like to add a derived MonadPlus instance for both Rand and RandT. Also, since it seems that MonadRandom has no maintainer I propose to take on its maintainership. Any comments/objections/etc. welcome.
Also, ignore what I said about deriving an instance for Rand, that does not make any sense. However, adding an instance for RandT does still make sense. A repository with the changes is here:
http://github.com/byorgey/MonadRandom
I'll upload in a few days if no one objects.
Puzzle time! Can you explain the semantics of the following code (given a derived MonadPlus instance for RandT)?
maybeFail :: RandT StdGen Maybe () maybeFail = do r <- getRandomR (0, 1 :: Double) guard (r < 1/2)
succeed :: RandT StdGen Maybe () succeed = maybeFail `mplus` succeed
I therefore rescind my proposal to add a MonadPlus instance for RandT. However, I still volunteer to be the maintainer. =)
-Brent
_______________________________________________ Libraries mailing list Libraries@haskell.org http://www.haskell.org/mailman/listinfo/libraries
-- Felipe.

Maybe a derived Alternative instance for RandT still makes sense?
Sjoerd
On Apr 25, 2013, at 8:28 PM, Brent Yorgey
On Thu, Apr 25, 2013 at 10:47:57AM -0400, Brent Yorgey wrote:
On Wed, Apr 24, 2013 at 02:38:01PM -0400, Brent Yorgey wrote:
Hi all,
I would like to add a derived MonadPlus instance for both Rand and RandT. Also, since it seems that MonadRandom has no maintainer I propose to take on its maintainership. Any comments/objections/etc. welcome.
Also, ignore what I said about deriving an instance for Rand, that does not make any sense. However, adding an instance for RandT does still make sense. A repository with the changes is here:
http://github.com/byorgey/MonadRandom
I'll upload in a few days if no one objects.
Puzzle time! Can you explain the semantics of the following code (given a derived MonadPlus instance for RandT)?
maybeFail :: RandT StdGen Maybe () maybeFail = do r <- getRandomR (0, 1 :: Double) guard (r < 1/2)
succeed :: RandT StdGen Maybe () succeed = maybeFail `mplus` succeed
I therefore rescind my proposal to add a MonadPlus instance for RandT. However, I still volunteer to be the maintainer. =)
-Brent
_______________________________________________ Libraries mailing list Libraries@haskell.org http://www.haskell.org/mailman/listinfo/libraries

Wouldn't Alternative lead to the same bug?
On Thu, Apr 25, 2013 at 7:02 PM, Sjoerd Visscher
Maybe a derived Alternative instance for RandT still makes sense?
Sjoerd
On Apr 25, 2013, at 8:28 PM, Brent Yorgey
wrote: On Thu, Apr 25, 2013 at 10:47:57AM -0400, Brent Yorgey wrote:
On Wed, Apr 24, 2013 at 02:38:01PM -0400, Brent Yorgey wrote:
Hi all,
I would like to add a derived MonadPlus instance for both Rand and RandT. Also, since it seems that MonadRandom has no maintainer I propose to take on its maintainership. Any comments/objections/etc. welcome.
Also, ignore what I said about deriving an instance for Rand, that does not make any sense. However, adding an instance for RandT does still make sense. A repository with the changes is here:
http://github.com/byorgey/MonadRandom
I'll upload in a few days if no one objects.
Puzzle time! Can you explain the semantics of the following code (given a derived MonadPlus instance for RandT)?
maybeFail :: RandT StdGen Maybe () maybeFail = do r <- getRandomR (0, 1 :: Double) guard (r < 1/2)
succeed :: RandT StdGen Maybe () succeed = maybeFail `mplus` succeed
I therefore rescind my proposal to add a MonadPlus instance for RandT. However, I still volunteer to be the maintainer. =)
-Brent
_______________________________________________ Libraries mailing list Libraries@haskell.org http://www.haskell.org/mailman/listinfo/libraries
_______________________________________________ Libraries mailing list Libraries@haskell.org http://www.haskell.org/mailman/listinfo/libraries
-- Felipe.

Uhm, yeah, I forgot that you can still use monadic bind together with the Alternative methods.
Never mind me!
Sjoerd
On Apr 26, 2013, at 12:22 AM, Felipe Almeida Lessa
Wouldn't Alternative lead to the same bug?
On Thu, Apr 25, 2013 at 7:02 PM, Sjoerd Visscher
wrote: Maybe a derived Alternative instance for RandT still makes sense?
Sjoerd
On Apr 25, 2013, at 8:28 PM, Brent Yorgey
wrote: On Thu, Apr 25, 2013 at 10:47:57AM -0400, Brent Yorgey wrote:
On Wed, Apr 24, 2013 at 02:38:01PM -0400, Brent Yorgey wrote:
Hi all,
I would like to add a derived MonadPlus instance for both Rand and RandT. Also, since it seems that MonadRandom has no maintainer I propose to take on its maintainership. Any comments/objections/etc. welcome.
Also, ignore what I said about deriving an instance for Rand, that does not make any sense. However, adding an instance for RandT does still make sense. A repository with the changes is here:
http://github.com/byorgey/MonadRandom
I'll upload in a few days if no one objects.
Puzzle time! Can you explain the semantics of the following code (given a derived MonadPlus instance for RandT)?
maybeFail :: RandT StdGen Maybe () maybeFail = do r <- getRandomR (0, 1 :: Double) guard (r < 1/2)
succeed :: RandT StdGen Maybe () succeed = maybeFail `mplus` succeed
I therefore rescind my proposal to add a MonadPlus instance for RandT. However, I still volunteer to be the maintainer. =)
-Brent
_______________________________________________ Libraries mailing list Libraries@haskell.org http://www.haskell.org/mailman/listinfo/libraries
_______________________________________________ Libraries mailing list Libraries@haskell.org http://www.haskell.org/mailman/listinfo/libraries
-- Felipe.

Right, the solution is that with RandT Maybe, upon failure the seed gets thrown away. That is, mplus runs both its arguments with the same seed. What I actually wanted was MaybeT Rand. That requires a MonadRandom instance for MaybeT, which I will add. -Brent On Fri, Apr 26, 2013 at 12:30:51AM +0200, Sjoerd Visscher wrote:
Uhm, yeah, I forgot that you can still use monadic bind together with the Alternative methods.
Never mind me!
Sjoerd
On Apr 26, 2013, at 12:22 AM, Felipe Almeida Lessa
wrote: Wouldn't Alternative lead to the same bug?
On Thu, Apr 25, 2013 at 7:02 PM, Sjoerd Visscher
wrote: Maybe a derived Alternative instance for RandT still makes sense?
Sjoerd
On Apr 25, 2013, at 8:28 PM, Brent Yorgey
wrote: On Thu, Apr 25, 2013 at 10:47:57AM -0400, Brent Yorgey wrote:
On Wed, Apr 24, 2013 at 02:38:01PM -0400, Brent Yorgey wrote:
Hi all,
I would like to add a derived MonadPlus instance for both Rand and RandT. Also, since it seems that MonadRandom has no maintainer I propose to take on its maintainership. Any comments/objections/etc. welcome.
Also, ignore what I said about deriving an instance for Rand, that does not make any sense. However, adding an instance for RandT does still make sense. A repository with the changes is here:
http://github.com/byorgey/MonadRandom
I'll upload in a few days if no one objects.
Puzzle time! Can you explain the semantics of the following code (given a derived MonadPlus instance for RandT)?
maybeFail :: RandT StdGen Maybe () maybeFail = do r <- getRandomR (0, 1 :: Double) guard (r < 1/2)
succeed :: RandT StdGen Maybe () succeed = maybeFail `mplus` succeed
I therefore rescind my proposal to add a MonadPlus instance for RandT. However, I still volunteer to be the maintainer. =)
-Brent
_______________________________________________ Libraries mailing list Libraries@haskell.org http://www.haskell.org/mailman/listinfo/libraries
_______________________________________________ Libraries mailing list Libraries@haskell.org http://www.haskell.org/mailman/listinfo/libraries
-- Felipe.
participants (3)
-
Brent Yorgey
-
Felipe Almeida Lessa
-
Sjoerd Visscher