This code reads the number of lines to process from the first line of stdin, then it loops number_of_lines_to_process times doing some calculations and prints the result.
I want it to print the line number in “Line #” after “#” but I don’t know how to obtain it
import IO
import Control.Monad (replicateM)
main :: IO ()
main = do
hSetBuffering stdin LineBuffering
s <- getLine
let number_of_lines_to_process = read s :: Integer
lines <- replicateM (fromIntegral(number_of_lines_to_process)) $ do
line <- getLine
let number = read line :: Integer
result = number*2 --example
putStrLn ("Line #"++": "++(show result)) --I want to print the number of the iteration and the result
return ()
I guess that the solution to this problem is really easy, but I’m not familiar with Haskell (coding in it for the first time) and I didn’t find any way of doing this. Can anyone help?
You could use
forM_instead ofreplicateM:Note that because you use
forM_(which discards the results of each iteration) you don’t need the additionalreturn ()at the end – thedoblock returns the value of the last statement, which in this case is the()which is returned byforM_.