6.6 Declared vs. Undeclared Functions
If you declare the type of a function, you can apply it to any data
that can be converted to the source type of the function.
Define f with type {\sf Integer Integer}.
f(x: Integer): Integer == x + 1
Function declaration f : Integer -> Integer has been added to
workspace.
Type: Void
The function f can be applied to integers, ...
Compiling function f with type Integer -> Integer
Type: PositiveInteger
and to values that convert to integers, ...
Type: Integer
but not to values that cannot be converted to integers.
Conversion failed in the compiled user function f .
Cannot convert from type Fraction Integer to Integer for value
2
-
3
To make the function over a wide range of types, do not declare its type.
Give the same definition with no declaration.
Type: Void
If makes sense, you can apply g to .
Compiling function g with type PositiveInteger -> PositiveInteger
Type: PositiveInteger
A version of g with different argument types get compiled for
each new kind of argument used.
Compiling function g with type Fraction Integer -> Fraction Integer
Type: Fraction Integer
Here for makes no sense.
There are 11 exposed and 5 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)
String
PositiveInteger
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
AXIOM will attempt to step through and interpret the code.
There are 11 exposed and 5 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)
String
PositiveInteger
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
As you will see in Chapter ugCategories Axiom has a formal idea of categories for
what ``makes sense.''