I have the following code which works fine:

type File = (String, String) --name and content

readDir :: String -> IO [File]
readDir dir = findRegularFiles dir >>= readFiles
  where
    findRegularFiles = find always (fileType ==? RegularFile)
    readFiles paths = mapM readFile paths >>= return.zip paths

...and I would like to write the function readDir like this:
readDir :: String -> IO [File]
readDir = findRegularFiles >>= readFiles
  where ...

...but I get the error:
grep.hs:46:32:
    Couldn't match expected type `IO [FilePath]'
                with actual type `[FilePath]'
    Expected type: IO [FilePath] -> String -> IO [File]
      Actual type: [FilePath] -> IO [File]
    In the second argument of `(>>=)', namely `readFiles'
    In the expression: findRegularFiles >>= readFiles

Can somebody please explain it?

It's not a big deal. I can keep the old version which works fine. My only problem is that I thought I understood the monads better but apparently I don't :)