
On Thursday 03 November 2011, 17:07:01, Hugo Ferreira wrote:
Hello,
Apologies the simpleton question but I would like to know how it is done in Haskell. I have a list of values, and I am applying a function to each of these elements. The result is a Maybe. I would like to return the first occurrence which is not a Nothing.
I am considering something like:
selectOne f = take 1 . filter (\e -> case e of Just _ -> True _ -> False ) . map f
I this how it is done?
In Data.Maybe, there's catMaybes :: [Maybe a] -> [a] mapMaybe :: (a -> Maybe b) -> [a] -> [b] listToMaybe :: [a] -> Maybe a maybeToList :: Maybe a -> [a] Your selectOne f is take 1 . catMaybes . map f or take 1 . mapMaybe f Alternatively, you could use the MonadPlus class from Control.Monad, which provides mzero, mplus and msum, with Maybe's MonadPlus instance selectOne f = maybeToList . msum . map f