prstanley: > I suppose I'm thinking of head or tail - e.g. head [] or tail []. > I'm trying to write my own version of the find function. I have a few > ideas but not quite sure which would be more suitable in the context of > FP. > Any advice would be gratefully received - e.g. do I use recursion, list > comprehension or what?
Well, you want to filter all elements from a list that match a predicate, and then return Just the first match, or Nothing? find :: (a -> Bool) -> [a] -> Maybe a Checking the current behaviour: > find isSpace "haskell is fun" Just ' ' My first go would be something like this: ok, so let's start with 'filter': > filter Char.isSpace "haskell is fun" " " Good, then the natural translation to the Maybe type: > listToMaybe . filter isSpace $ "haskell is fun" Just ' ' And we're almost done. Just firing up QuickCheck: > quickCheck $ \p (xs :: [Int]) -> find p xs == listToMaybe (filter p xs) OK, passed 100 tests. Seems ok. I hope that gives some insight into the process of deriving Haskell implementations by building up a pipeline of pieces. -- Don _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe