Functions

Signatures are always explicit

Coming from a language that infers return types — Haskell, TypeScript, Rust — here’s the one adjustment: a function signature is always written out in full. Every parameter’s type, and the return type. Leave the return type off and Ascent won’t guess for you:

The fix is to say what comes back — add : Int:

Notice the asymmetry: the function is fully annotated, but result isn’t — its type is inferred from what half returns. That’s the whole rule in one line: signatures are explicit, slots are inferred. Spelling out the signature keeps type errors local and readable; the slots you write all day still stay quiet.