The following definition is rejected by Lean:
inductive natlist
| nil : natlist
| cons: natlist → ℕ → natlist
with the error message "arg #2 of 'natlist.cons' is not recursive, but it occurs after recursive arguments"
And the following definition is accepted, as expected:
inductive natlist
| nil : natlist
| cons: ℕ → natlist → natlist
What is the reason Lean enforces this order?