Thanks Neil,

Great. I hadn't noticed "isJust", and I'd forgotten "any". Actually I was browsing Prelude just the other day and picked up "zipWith f as bs" as a replacement for "map f $ zip as bs".

Cheers, Paul


-----Original Message-----
From: Mitchell, Neil [mailto:neil.mitchell.2@credit-suisse.com]
Sent: Wed 12/11/2008 10:23
To: Paul Keir; haskell-cafe@haskell.org
Subject: RE: [Haskell-cafe] Searching for ADT patterns with elem and find

Hi Paul,

maybe False (\x -> True) (find isTypeB ts)

This can be more neatly expressed as:

isJust (find isTypeB ts)

But your entire thing can be expressed as:

containsTypeB ts = any isTypeB ts

I recommend reading through the Prelude interface and the List
interface, it has many useful functions that will help.

Thanks

Neil



________________________________

        From: haskell-cafe-bounces@haskell.org
[mailto:haskell-cafe-bounces@haskell.org] On Behalf Of Paul Keir
        Sent: 12 November 2008 10:09 am
        To: haskell-cafe@haskell.org
        Subject: [Haskell-cafe] Searching for ADT patterns with elem and
find
       
       

        Hi All,
       
        If I have an ADT, say
       
        data T
         = A String Integer
         | B Double
         | C
         deriving(Eq)
       
        and I want to find if a list (ts) of type T contains an element
of subtype "B Double", must my "containsTypeX" function use a second
"isTypeX" function as follows:
       
        isTypeB :: T -> Bool
        isTypeB (B _) = True
        isTypeB _     = False
       
        containsTypeB :: [T] -> Bool
        containsTypeB ts = maybe False (\x -> True) (find isTypeB ts)
       
        I understand that while something like "find C ts" will work,
"find (isTypeB _) ts" will not, but is there no such thing as a pattern
combinator(?), or lambda that could help with this situation. I find I
have many individual "isTypeB" functions now.
       
        Regards,
        Paul


==============================================================================
Please access the attached hyperlink for an important electronic communications disclaimer:

http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html
==============================================================================