type Port { value: Int >= 1 and <= 65535 } type Rate { value: Decimal >= 0.0 and <= 1.0 } type Row { value: Int } choose(value: Int >= 1 and <= 65535) (answer: Port) pure { answer = Port { value = value } } choose(value: other) (answer: Port) pure { answer = Port { value = 8080 } } step(value: Port) (answer: Int >= 2 and <= 65536) pure { answer = value.value + 1 } scaled(value: Rate) (answer: Decimal >= 0.0 and <= 100.0) pure { answer = value.value * 100.0 } total(values: List) (answer: Int) pure { answer = sum(step, values) } rates(values: List) (answer: Decimal) pure { answer = sum(scaled, values) } apply(route: handler(value: Int >= 1) (answer: Int >= 2)) (answer: Int >= 2) { answer = route(1) } constant(value: Int) (answer: Int) pure { answer = 2 } snapshot() (answer: Int >= 1) pure { original = Row { value = 3 } saved = original original.value = 0 answer = saved.value } verify() (answer: Bool) { answer = choose(0).value == 8080 and step(choose(65535)) == 65536 and total([choose(1), choose(2)]) == 5 and rates([Rate { value = 0.25 }, Rate { value = 0.5 }]) == 75.0 and snapshot() == 3 and apply(constant) == 2 }