The bindings in the do
block are opaque to the where
statement after it, so you can't reference anything defined in the do
block inside the where
statement. You don't need to either, since you can use let
directly inside do
:
prog1 = do m <- getLine
n <- getLine
p <- getLine
-- alternatively: [m, n, p] <- replicateM 3 getLine
-- use a let statement
let a = read m :: Int
replicateM_ a (putStrLn n)
replicateM_ a (putStrLn p)