[Aldor-l] [Axiom-math] Are Fraction and Complex domains.
Ralf Hemmecke
ralf at hemmecke.de
Thu May 11 18:58:00 EDT 2006
Hello Gaby,
I have included aldor-l in this thread, because I think you raised an
important question with the "functional type (sub-)language".
Additionally, I've moved it from axiom-math to axiom-developer.
On 05/11/2006 08:49 PM, Gabriel Dos Reis wrote:
> Ralf Hemmecke <ralf at hemmecke.de> writes:
[snip]
> | > | or " Integer " is an abbreviation for Integer without parameter ?
> |
> | > from the functional perspective, Integer is a nullary (type) function;
> | > it is actually a type constant.
> |
> | From a functional point of view you are certainly right, the only
> | problem is that Aldor is not functional.
>
> That should not matter; and if it does, it is a bug!
Well, to me it is not a bug. But I am not the language designer. I am
sure Stephen Watt could make things clear here.
> Do you really want a type system whose language is not functional?
Actually, I haven't thought about this. I somehow have the feeling that
the Aldor compiler implements such a functional type language. But I
don't know whether this is on purpose.
> Notice, that I'm not saying the term language should be functional.
> I'm talking of the type (sub-)language. How do you work with a type
> system system whose constructors do not evaluate the same arguments to
> the same value?
Surely, it would sound strange if I say:
a: SparseUnivariatePolynomial Integer := ...
b: SparseUnivariatePolynomial Integer := ...
and the compiler would reject
a + b
because it could not figure out that a and b are of the same type
(because of non-functionality). So in this sense I certainly find a
functional type language more natural.
> | BTW, I would rather say, Integer is a type constant. If Integer() is
> | defined and works in Axiom then please show me a definition of the
> | language that makes it clear that if one defines
>
> Please, first, show me how you meaningfully work with a type system
> where the type language is not functional.
That is not a field where I'm an expert in.
> | Integer: SomeIntegerCategory
> |
> | that also
> |
> | Integer: () -> SomeIntegerCategory
> |
> | To me, these two things clearly have a different type.
> The syntaxes are different; the question is whether the *semantics*
> should be different. The answer must be "no", for a workable type
> system.
I don't agree. The program
----------------------------------------------------------
aldor -grun -laldor aaa.as
Dom: 1
Dom(): 0
--begin aaa.as --------------------------------------------
#include "aldor"
#include "aldorio"
Cat: Category == Join(ArithmeticType, OutputType) with;
Dom: Cat == Integer add;
Dom(): Cat == Integer add {
Rep == Integer;
import from Rep;
1: % == per 0;
}
main(): () == {
import from Dom, Dom();
stdout << "Dom: " << 1$Dom << newline;
stdout << "Dom(): " << 1$Dom() << newline;
}
main();
--end aaa.as
shows that Dom and Dom() need not be identical and one can still have a
consistent type system.
I would even call it functional (if Dom() always produces the same
value). It is only that things of type Cat and things of type ()->Cat
are not identified even if they happen to have the same name.
But of course, I could live with that identification if it is clearly
documented that ()->Cat can be identified with Cat. Where are our
category experts? I believe there is a distinction here, n'est pas?
Ralf
More information about the Aldor-l
mailing list