
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