Skip to content

Commit c632a7b

Browse files
author
Mizunashi Mana
committed
Fix by reviews
1 parent ff5f4c5 commit c632a7b

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

preprocessed-site/posts/2020/io-monad-and-sideeffect.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ addAction x y = PureAction (\_ -> x + y)
146146
()
147147
```
148148

149-
もし、さっきの `putStrLn "str"` がちゃんと計算されていたなら、今回は `something happened!` というエラーが見れるはずだ。ところが、全く何の問題もなく式の実行は終わり、`()` が出力されてしまった。Haskell は遅延評価により、最終結果に本当に必要な部分しか計算してくれないので、`putStrLn "str"` の部分は計算されず無視されてしまっていただけのようだ。では、ちゃんと修正してみよう。修正は、`seq` という魔法の関数を使うことで可能だ。`seq :: a -> b -> b` は一番最初に渡された引数を計算し、その後2番目の引数に与えられたものを返す関数だ。この関数を使うと、次のように修正が可能だ:
149+
もし、さっきの `putStrLn "str"` がちゃんと計算されていたなら、今回は `something happened!` というエラーが見れるはずだ。ところが、全く何の問題もなく式の実行は終わり、`()` が出力されてしまった。Haskell は遅延評価により、最終結果に本当に必要な部分しか計算してくれないので、`putStrLn "str"` の部分は計算されず無視されてしまっていただけのようだ。では、ちゃんと修正してみよう。修正は、`seq` という魔法の関数を使うことで可能だ。`seq :: a -> b -> b` は一番最初に渡された引数を (必要かどうかに関わらず、強制的に) 計算し、その後2番目の引数を返す関数だ。この関数を使うと、次のように修正が可能だ:
150150

151151
```haskell
152152
>>> putStrLn "str" `seq` ()

0 commit comments

Comments
 (0)