swap :: State a (State a ()) ๊ฐ์ ํจ์๋ฅผ algebraic effect๋ก ๊ธฐ์ ํ๋ ค๋ฉด ๊ฐ์ ํจ๊ณผ๊ฐ ๋๋ฒ ๋์ค๊ธฐ์ koka๋ named handlers๋ฅผ ์คํํ๊ณ ์๋ค.
์ณ์ ๋ฐฉํฅ์ด๋ผ๊ณ ์๊ฐํ๋ค. ๊ธฐ์กด์ koka๋ masked effect๋ผ๋ ๋ณต์กํ ๊ฐ๋
์ ์ฌ์ฉํด outer effect์ ์ ๊ทผํ๋ค.
fun swap-with-mask() : <state<a>, state<a>> () {
val inner-val = get() // innermost
val outer-val = mask<state<a>> { get() } // skip the innermost
set(outer-val) // innermost
mask<state<a>> { set(inner-val) } // skip the innermost
}
ํ์ง๋ง named handler์ ํจ๊ป๋ผ๋ฉด ์ด๋ ๊ฒ ์ธ ์ ์๋ค
fun swap-with-named-handlers(h1, h2) : <state<a>> () {
val val1 = perform get() at h1
val val2 = perform get() at h2
perform set(val2) at h1
perform set(val1) at h2
}


