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
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe