私はHaskellの本を読んでいて、何を理解しようとしていますIO
。共有の値を無効にする
は、次の例を考えてみましょう:
import Debug.Trace
blah :: IO String
blah = return "blah"
blah' = trace "outer trace" blah
woot :: IO String
woot = return (trace "inner trace" "woot")
main :: IO()
main = do
b <- blah'
putStrLn b
putStrLn b
w <- woot
putStrLn w
putStrLn w
GHCiの中出力:
Prelude> main
outer trace
blah
blah
inner trace
woot
woot
その後、著者は言う:我々は唯一の内側と外側が一度あるため放出されました
IOは で値の共有を無効にすることはできませんIOアクションの実行中に が使用されたIO内に存在しません。
投稿者は何と言っていますか?
あなたがIO
の内部の値を参照するために<-
を使用し、b
とw
はString
値となる:引用符が解析するのは難しいようですが、ここで私はそれが意味思い何ん
'最後に、いくつかの関数呼び出しの間に参照値を明示的に共有する 'という例文を参考にしてください。 –
@zero_coding OPコードには2つの例があります: 'b'は' putStrLn'を2回呼び出す間に共有され、 'w'も同様です。 –
これら2つは「参照的に透過的な値」です。 –