Jorge Adriano wrote: >Seems to me like the name findM could be misleading >mapM :: (Monad m) => (a -> m b) -> [a] -> m [b] >filterM :: (Monad m) => (a -> m Bool) -> [a] -> m [a] > >These take a monadic function and a list of elements. Yours works the other >way around (takes a function and a list of 'monadic elements'). >I'd expect the definition of findM to be: > >findM' :: (Monad m) => (a -> m Bool) -> [a] -> m (Maybe a) >findM' f [] = return Nothing >findM' f (x:xs) = do { b <- f x; if b then return (Just x) else findM' f xs } > >This one doesn't serve your purpose though. >J.A. > >
I appreciate your comment. I agree that the type of findM should be the one you suggested, and it still fits my original purpose. It's no more than a step arout. \begin{code} import IO findM f [] = return Nothing findM f (x:xs) = do { b <- f x; if b then return (Just x) else findM f xs } isLeft (Left _) = True isLeft _ = False main = findM (>>=return.isLeft) (hCat stdin) where hCat h = try (hGetLine h>>=putStrLn) : hCat h \end{code} I expetct the next Haskell Library Report includes findM. It's obviously useful. _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe