[Haskell-cafe] [Maybe Int] sans Nothings

Brent Yorgey byorgey at seas.upenn.edu
Mon May 23 21:08:09 CEST 2011


On Mon, May 23, 2011 at 10:49:55AM -0700, Alexander Solla wrote:
> On Mon, May 23, 2011 at 9:20 AM, michael rice <nowgate at yahoo.com> wrote:
> 
> > What's the best way to end up with a list composed of only the Just values,
> > no Nothings?
> >
> > Michael
> >
> > ==========================
> >
> > import Control.Monad.State
> > import Data.Maybe
> >
> >
> > type GeneratorState = State Int
> >
> > tick :: GeneratorState (Maybe Int)
> > tick = do n <- get
> >           if ((n `mod` 7) == 0)
> >             then
> >               return Nothing
> >             else do
> >               put (n+1)
> >               return (Just n)
> >
> > {-
> > *Main> evalState (sequence $ replicate 9 tick) 1
> > [Just 1,Just 2,Just 3,Just 4,Just 5,Just 6,Nothing,Nothing,Nothing]
> > -}
> >
> >
> There's a library function for it, but also:
> 
> > filter ((/=) Nothing)
> 
> is readable enough.

Just a minor quibble: note that

> filter (not . isNothing)

is slightly preferable since it does not introduce a frivolous
equality constraint on the type wrapped by the Maybe.

-Brent



More information about the Haskell-Cafe mailing list