Re[Haskell-cafe] cursive to foldr
ezra.lalonde at gmail.com
Tue Nov 17 18:31:19 EST 2009
Using the same basic structure you did, and foldr, I think below is the
searchList :: (a -> Bool) -> [a] -> Maybe [a]
searchList p xs = foldr (\x acc -> if p x then Just (x: fromMaybe  acc)
else acc) Nothing xs
ghci> searchList (=='o') "A quick brown fox"
ghci> searchList (==' ') "A quick brown fox"
Just " "
ghci> searchList (=='z') "A quick brown fox"
>From maybe gets rid of the Maybe, so that our recursive call works:
ghci> fromMaybe  (Just [1..3])
That's why we got the error below when we tried without fromMaybe; on
subsequent applications of foldr, the type would have to change.
Couldn't match expected type `[a]'
against inferred type `Maybe [a]'
In the expression: if p x then Just (x : acc) else acc
In the first argument of `foldr', namely
`(\ x acc -> if p x then Just (x : acc) else acc)'
In the expression:
foldr (\ x acc -> if p x then Just (x : acc) else acc) Nothing xs
I have a feeling that using fromMaybe is not the best way, but it gets the
job done for now.
On that note; if somebody with some more experience would chime in, that'd
be awesome. ;)
> How can I do this using foldr?
> searchList p  = Nothing
> searchList p (x:xs)
> | p x = Just (x:filter p xs)
> | otherwise = searchList p xs
> I try this:
> searchList p xs = foldr (\x acc -> if p x then Just (x:acc) else acc)
> Nothing xs
> but don't work.
View this message in context: http://old.nabble.com/Recursive-to-foldr-tp26368900p26399795.html
Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.
More information about the Haskell-Cafe