;; Return types read off the body: no arrow here, _ in the return slot in ;; main.flan. Each shape the rule has: one type, a call's type, a literal ;; that takes the other exit's type, a dyn beside a literal, nothing (()), a return ;; that never falls off the end, and a function that calls itself and gives ;; nothing. fn add(x: i32, y: i32) = x + y fn half(x: f64) = x / 2.0 fn quarter(x: f64) = half(half(x)) fn pick(c: bool) if c return 1 2.5 fn label(c: bool, d) if c return d 0 fn say(x: i32) = println(x) fn- floor0(x: i32) if x < 0 then return 0 else x fn countdown(n: i32) if n > 0 println(n) countdown(n - 1) fn main() -> i32 println(add(1, 2)) println(quarter(10.0)) println(pick(true) + 0.5) println(pick(false)) println(label(true, "yes"), label(false, "yes")) say(4) println(floor0(-3), floor0(5)) countdown(2) 0