This following shows that functions in Axiom have types and a domain for functions may be associated with an identifier.
fricas
(1) -> dom:=(INT->INT)
Type: Type
fricas
f:dom
Type: Void
fricas
f x == x-1
Type: Void
However, when the function is compiled, the returned type displayed may not agree with its declared type or even its apparent compiled type and depends on the input!
fricas
f 3
fricas
Compiling function f with type Integer -> Integer
fricas
f(-3)
Type: Integer
This has nothing to do with the declaration of f.
fricas
f(x:INT):INT==x-1
   Function declaration f : Integer -> Integer has been added to 
      workspace.
   Compiled code for f has been cleared.
   1 old definition(s) deleted for function or rule f
Type: Void
fricas
f(3)
fricas
Compiling function f with type Integer -> Integer
fricas
f(-3)
Type: Integer
Not even:
fricas
f(x:INT):INT==(x-1)::INT
   Function declaration f : Integer -> Integer has been added to 
      workspace.
   Compiled code for f has been cleared.
   1 old definition(s) deleted for function or rule f
Type: Void
fricas
f(3)
fricas
Compiling function f with type Integer -> Integer
fricas
f(-3)
Type: Integer
Or even:
fricas
g(x:INT):NNI == 2^(sign(x)*x)::NNI
   Function declaration g : Integer -> NonNegativeInteger has been 
      added to workspace.
Type: Void
fricas
g 3
fricas
Compiling function g with type Integer -> NonNegativeInteger
fricas
Compiling function G0 with type Integer -> Boolean
The following deliberate "error" shows the Interpreter always assumes 3 is of type PositiveInteger.
fricas
f 3
fricas
f -3
   There are 9 exposed and 6 unexposed library operations named - 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                                )display op -
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
   Cannot find a definition or applicable library operation named - 
      with argument type(s) 
                              FunctionCalled(f)
                               PositiveInteger
      Perhaps you should use "@" to indicate the required return type, 
      or "$" to specify which version of the function you need.
Compare the type returned below for g 1, the retraction to PositiveInteger is not done.
fricas
g(x:INT): FRAC INT == 1/x
   Function declaration g : Integer -> Fraction(Integer) has been added
      to workspace.
   Compiled code for g has been cleared.
   1 old definition(s) deleted for function or rule g
Type: Void
fricas
g 1
fricas
Compiling function g with type Integer -> Fraction(Integer)
Type: Fraction(Integer)
The difference may perhaps be due to the fact that the data structure of FRAC INT is very different from INT, whereas the data structure of INT is identical to that of PI. So the explanation that the reason 1/1 is not retracted because retract is not always possible is not the full story.
Status: open => rejected 
The report is confused.
There is a distinction between 
function's declared type (which does not
change), 
and the type inferred by the interpreter for
the value computed by a function.
These are two separate processes.