
26 Nov
2010
26 Nov
'10
2:46 p.m.
Hello. I need a function findIndexM, similar to findIndex from the standard module Data.List, but which works with a monadic predicate to test list elements. findIndex :: (a -> Bool) -> [a] -> Maybe Int findIndexM :: (Monad m, Num a) => (t -> m Bool) -> [t] -> m (Maybe a) findIndexM p xs = go 0 xs where go _ [] = return Nothing go n (x:xs) = do res <- p x if res then return (Just n) else go (n+1) xs How can this function be rewritten using combinators? Romildo