type Problem { error Denied(message: Text) } appendSnapshot(item: Int, state: List) (next: List) { next = append(state, item) next = append(next, length(state)) } stopAppend(item: Int, state: List) (next: List, stop: Bool) { next = append(state, item) stop = item == 2 } build(items: List, initial: List) (answer: List) { answer = reduce(appendSnapshot, items, initial) } keep(entry: MapEntry) (answer: Bool) { answer = entry.value > 1 } merge(entry: MapEntry, state: Map) (next: Map) { next = put(state, entry.key, entry.value) } stopMerge(entry: MapEntry, state: Map) (next: Map, stop: Bool) { next = put(state, entry.key, entry.value) stop = entry.value == 2 } fallibleAppend(item: 0, state: List) (next: List) { next = append(state, item) fail(Problem.Denied("owned state")) } fallibleAppend(item: other, state: List) (next: List) { next = append(state, item + 1) } failureEntry() (answer: List) { answer = reduce(fallibleAppend, [1, 0, 9223372036854775807], []) } faultEntry() (answer: List) { answer = reduce(fallibleAppend, [9223372036854775807, 0], []) } verify() (answer: Bool) { initial = [10] answer = build([1, 2], initial) == [10, 1, 1, 2, 3] and initial == [10] answer = answer and build([], initial) == initial answer = answer and reduceUntil(stopAppend, [1, 2, 3], initial) == [10, 1, 2] answer = answer and initial == [10] original = { "a" = 1 "b" = 2 "c" = 3 } selected = filter(keep, entries(original)) answer = answer and selected == entries({ "b" = 2 "c" = 3 }) answer = answer and find(keep, entries(original)) == first(selected) copied = entries(original) seed = { "seed" = 9 } merged = reduce(merge, entries(original), seed) answer = answer and merged == { "seed" = 9 "a" = 1 "b" = 2 "c" = 3 } stopped = reduceUntil(stopMerge, entries(original), seed) answer = answer and stopped == { "seed" = 9 "a" = 1 "b" = 2 } answer = answer and seed == { "seed" = 9 } and entries(original) == copied answer = answer and verifyAppend(original) answer = answer and verifyForwarding() } appendEntry(entry: MapEntry, state: List>) (next: List>) { next = append(state, entry) } verifyAppend(original: Map) (answer: Bool) { initial = entries({ "seed" = 9 }) copied = reduce(appendEntry, entries(original), initial) answer = copied == entries({ "seed" = 9 "a" = 1 "b" = 2 "c" = 3 }) answer = answer and initial == entries({ "seed" = 9 }) answer = answer and reduce(appendEntry, entries({}), initial) == initial } passValues(values: List) (answer: List) { answer = values } combineValues(first: List, second: List) (answer: List) { answer = append(first, sum(second)) } forwardValues(values: List) (answer: List) { local = append(values, 7) alias = local moved = passValues(local) moved = append(moved, 9) answer = combineValues(moved, alias) } verifyForwarding() (answer: Bool) { original = [1, 2] forwarded = forwardValues(original) answer = forwarded == [1, 2, 7, 9, 10] and original == [1, 2] shared = [3, 4] combined = combineValues(shared, shared) answer = answer and combined == [3, 4, 7] and shared == [3, 4] }