language spec allow either
define fac(a: Int) =
if a == 0: return 1
return fac (a - 1)
or
define fac(a: Int) =
if a > 0: return fac (a - 1)
return 1
to successfully deducing fac: Function Int Int since one of the return statement is valid.
But currently implementation forces the return type declaration when function make recursive calls.