What it means. A function parameter, method parameter, or struct-shorthand field is written without a type. Unlike lambda parameters, these declaration sites have no surrounding context to infer from, so each one must state its own type.
The usual trigger is Go-style grouped parameter syntax, where several names share a trailing type.
func add(a, b int) int = a + b // `a` has no declared type
struct Point(X, Y int) // `X` has no declared type
GALA parses (a, b int) as a typeless a followed by a typed b int — it does not propagate the trailing type back over the earlier names. Grouped parameters are not a supported feature.
error[GALA-E0034]: parameter "a" has no declared type
--> e0034.gala:3:10
|
3 | func add(a, b int) int = a + b
| ^ type every parameter individually
|
= hint: type every parameter individually (e.g. `a int`); GALA does not support Go-style grouped parameters like `(a, b int)`
Give every parameter and field its own type:
func add(a int, b int) int = a + b
struct Point(X int, Y int)
Emitting any for the untyped parameter would violate GALA’s concrete-types invariant and only surface later as a confusing Go build failure (mismatched types any and int). Rejecting it at the declaration site names the exact parameter and points at the fix. Keeping one type per parameter also makes the rule uniform across function signatures, method signatures, and struct-shorthand fields.