-- Written by Mohit jain
-- Read a file and prepend line number to each line
module Main where
import Control.Monad.State
contents = unlines ["line 1", "line 2", "line 3"]
main = do
(st, ad) <- runStateT(addLineNumber(lines contents)) 0
putStr $ unlines st
addLineNumber :: [String] -> StateT Int IO [String]
addLineNumber = f where
f = mapM g
g li = do
modify (+1)
liftM(h li) get
h li ln = show ln ++ ": " ++ li