IOモナドの入力関数も、引数のない関数=変数と捉えると、実質線形型と同じ。

let x = 0 in return (x + 1) >>= x -> print x

こうすると変数xはシャドーイングによって同名の別の変数が生成される。

getLineとかの入力関数はHaskell(数学)の外で初期化される変数とも考えられる。