deniok: (Default)
deniok ([personal profile] deniok) wrote2012-04-15 03:57 pm

Знай и люби монаду IO

Устно вычислите значения побочные эффекты выражений и проверьте результат в GHCi:
let x = print "first" in print "second"

let x = print "first" in x >> print "second"

(\x -> print "first") (print "second")

print "first" `seq` print "second"
(Значения тоже можете вычислить в качестве бонуса:)

[identity profile] bravit.livejournal.com 2012-04-15 12:00 pm (UTC)(link)
С seq ошибся…

[identity profile] deni-ok.livejournal.com 2012-04-15 12:22 pm (UTC)(link)
Ради этого всё затевалось :)

[identity profile] sergei lebedev (from livejournal.com) 2012-04-15 12:28 pm (UTC)(link)
Аналогично, только я что-то не до конца понимаю почему вычисление 'print "first"' до HNF не дало сайд-эффекта?

[identity profile] nponeccop.livejournal.com 2012-04-15 01:14 pm (UTC)(link)
Грубо говоря, потому что сайд-эффекты производит runIO в рантайм-библиотеке, а вычисление "print first" лишь вычисляет, какой эффект надо произвести. Всё, что не попадает в runIO, не производит эффектов, независимо от того, вычисляется или нет.

Для полноты картины нужны ещё примеры с unsafePerformIO