[Haskell-cafe] MonadList?

Michael Shulman viritrilbia at gmail.com
Wed Sep 13 16:52:41 EDT 2006

In another thread, I wrote:
> main = (>> return ()) $ runListT $ do
>         arg <- ListT getArgs
>         n <- ListT $ return [1..3]
>         liftIO $ putStrLn ((show n) ++ ") " ++ arg)

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

instance MonadList [] where
    option = id

instance (Monad m) => MonadList (ListT m) where
    option = ListT . return

Has anyone else thought about or done something like this?


More information about the Haskell-Cafe mailing list