qualified_effects

Qualification changes lookup, not the evidence supplied by a handler.

运行

CI 运行的命令,以及它逐字节核对的输出。

sh

dawn run examples/projects/qualified_effects

42

examples/projects/qualified_effects/src/main.dawn

main.dawn
# Qualification changes lookup, not the evidence supplied by a handler.
use library as dep

alias Callback = fn() -> Int !dep.Ask

fn consume(f: Callback) -> Int !dep.Ask = f() + dep.ask()

fn handled_answer() -> Int = {
  let answer = () => {
    with handle dep.Ask { ask() => 21 }
    consume(() => dep.ask())
  }
  answer()
}

test "qualified callbacks and handlers share the provider effect" {
  assert (handled_answer() == 42)
}

pub fn main() -> Unit !io = {
  println("${handled_answer()}")
}

examples/projects/qualified_effects/src/library.dawn

library.dawn
# A public effect keeps its identity across every importing module alias.
pub effect Ask { fn ask() -> Int }