- 248 名前:デフォルトの名無しさん mailto:sage [04/10/15 12:14:00]
- >>246
> であり、putStr "Hello " >> putStr "World" > とした場合、putStr "Hello "とputStr "World"のそれぞれが評価される > 順番は問題ではない。 順番は問題。これは左から評価しないと(されるように>>が定義されてないと)、 putStr "Hello ">> error "Error." 等が正しくうごかない。 > この動作は、main = ...というように、mainに代入されることにより、 > 評価器とは切り離された装置によって出力に変えられる。 上とも関連して、出力しながら内部の式を評価するわけで、 評価し終わったものを実行するのでは「ない」のだから、 main world を評価すると考えるほうがいいのでは。 上で自分でもただStateモナドのようにかいてしまったけれど、 IO a = World -> (a, World) {- ただしStrict -} と思うことにして。 (正則性と関連して実はIOはモナドの結合法則を満たしていなかったような) > つまり、putStr "Hello " >> (putStr "World" >> putStr "\n") > とした場合、putStr "World >> putStr "\n"の部分が先に評価されて、 ここも左から評価される。 あとは大体OKと思う。
|

|