findA f = foldr (\x next -> f x >>= \case True -> pure (Just x); False -> next) (pure Nothing)
или
findA f = foldr (\x -> ifM (f x) (pure (Just x))) (pure Nothing)
ifM :: Monad m => m Bool -> m a -> m a -> m a
ifM cond t e = do
cond' <- cond
if cond' then t else e
как выше зига скинул еще
Только это уже будет findM, т.к. ifM используется, так ведь?