
On Mon, May 23, 2011 at 10:49:55AM -0700, Alexander Solla wrote:
On Mon, May 23, 2011 at 9:20 AM, michael rice
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