Michael Shulman wrote:
The frequent occurence of "ListT $ return" in my code when I use the ListT
monad transformer has made me wonder why there isn't a standard typeclass
`MonadList', like those for the other monad transformers, encapsulating
the essence of being a "list-like" monad -- in this case, the ability to
select from a list of things.  I quickly wrote one for myself:

class MonadList m where
   option :: [a] -> m a

Another use for this class is for selecting a random option:

> instance MonadList SomeMonadWithRandomness where
>    option os = pos <- randomRM (0, length os - 1)
>                return (os !! pos)

It can also be used for the Nondet monad described in http://haskell.org/hawiki/NonDeterminism, and as a replacement for the Parsec combinator 'choice' (which IMHO is a better name). Although msum might suffice in these cases.

Twan
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to