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
}