Suppose, there is a reset
block with a single shift
:
val r = reset { // do smth. 1 shift {...} // do smth. 2 // do smth. 3 }
Is it correct that I place the shift
after "do smth. 2" or "do smth. 3" without changing the result r
? Is it correct that it does not matter where shift
stands in a reset
block?
It highly depends on what you are making within shift
. If you just calling provided function like this: shift((k: Unit => Unit) => k(Unit))
then, in your particular example, it really doesn't matter where shift
stands.
Shift
function just captures code that comes after it in other function (in my example this function is called k
). In other words, this code:
val r = reset {
// do smth. 1
shift((k: Unit => Unit) => k(Unit))
// do smth. 2
// do smth. 3
}
would be rewritten by compiler in something like this (this code just demonstrates general idea and it's not supposed to show what compiler plugin will actually generate):
val k = (Unit => Unit) => {
// do smth. 2
// do smth. 3
}
val r = {
// do smth. 1
k(Unit)
}
But if you have some logic inside shift
, like conditional k
execution, then it really matters where this shift
stands.
Hope this helps (and I hope, that I understood your question correctly)