I solved the hacker-rank hello world n times challenge thus:

hello_worlds :: Int -> IO ()
hello_worlds n
| n < 1 = return ()
| otherwise = do
putStrLn "Hello World"
hello_worlds (n-1)

main :: IO()
main = do
n <- readLn :: IO Int
hello_worlds n

I would like to solve this by using the interact function.
If I leave my hello_worlds function as is and change the main function as follows:

main = interact $ show . hello_worlds . read::Int

I get:

Couldn't match expected type ‘IO t0’ with actual type ‘Int’
    • In the expression: main
      When checking the type of the IO action ‘main’

helloworlds.hs:14:8-44: error:
    • Couldn't match expected type ‘Int’ with actual type ‘IO ()’
    • In the expression: interact $ show . hello_worlds . read :: Int
      In an equation for ‘main’:
          main = interact $ show . hello_worlds . read :: Int

could someone please explain why this can't work?
Is it possible to use interact in such a context?

Thanks