2011/12/29 Manfred Lotz <manfred.lotz@arcor.de>
Hi there,
might be trivial but anyway.

I have a usage of 'any' and 'all' but I only have a predicate
p :: a -> IO Bool.

I wrote my own functons for this:


mor :: Monad m => [m Bool] -> m Bool
mor = liftM or . sequence

mand :: Monad m => [m Bool] -> m Bool
mand = liftM and . sequence

or' :: Monad m => ( a -> m Bool) -> [a] -> [m Bool]
or' _ [] = []
or' p (x:xs) = p x : or' p xs

and' :: Monad m => ( a -> m Bool) -> [a] -> [m Bool]
and' _ [] = []
and' p (x:xs) = p x : and' p xs

myany :: Monad m => (a -> m Bool) -> [a] -> m Bool
myany p = mor . or' p

myall :: Monad m => (a -> m Bool) -> [a] -> m Bool
myall p = mand . and' p


which seems to do what I want.


Question: Is there any libray function I could use to do this?


--
Thanks,
Manfred
 
Hi Manfred,

have a look here: http://hackage.haskell.org/packages/archive/monad-loops/latest/doc/html/Control-Monad-Loops.html#v:allM

Regards Tim