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)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…