type Problem { error Denied(message: Text) } key(item: 0) (answer: Text) { fail(Problem.Denied("key first")) } key(item: other) (answer: Text) { answer = "ok" } checkedValue(value: Int) (answer: Int) { answer = value + 1 } write(item: Int, state: Map) (answer: Map) { answer = put(state, key(item), checkedValue(9223372036854775807)) } present(value: Int) (answer: Int) { answer = value } present(value: null) (answer: Int) { answer = 0 } bump(item: Id, state: Map) (answer: Map) { answer = put(state, item, present(get(state, item)) + 1) } add(item: Int, state: Int) (answer: Int) { answer = state + item } nestedValue(item: Int, state: Map) (answer: Map) { answer = put(state, item, reduce(add, [item, 1], present(get(state, item)))) } keyFailure() (answer: Map) { answer = reduce(write, [0], {}) } valueFault() (answer: Map) { answer = reduce(write, [1], {}) } seedFailure() (answer: Map) { answer = reduce(write, [], put({}, key(0), 0)) } verify() (answer: Bool) { seed = { dever.id.fromText("a") = 4 } ids = each(dever.id.fromText, ["a", "b", "a"]) values = reduce(bump, ids, seed) answer = get(values, dever.id.fromText("a")) == 6 and get(values, dever.id.fromText("b")) == 1 answer = answer and get(seed, dever.id.fromText("a")) == 4 and length(seed) == 1 answer = answer and reduce(bump, [], seed) == seed answer = answer and length(reduce(write, [], {})) == 0 answer = answer and get(reduce(nestedValue, [2, 2], {}), 2) == 6 }