[Haskell-beginners] Use of interact

Michele Alzetta michele.alzetta at gmail.com
Sun Feb 10 16:10:13 UTC 2019

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

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?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20190210/21c11099/attachment.html>

More information about the Beginners mailing list