[Aldor-l] exports and constants
Ralf Hemmecke
ralf at hemmecke.de
Mon Jul 24 16:48:28 EDT 2006
> Has expressions
>
> A ``has'' expression has the following form:
>
> dom has cat
>
> where dom is a domain-valued expression, and cat is a category-valued
> expression. A ``has'' expression may be used in any part of a program,
> but is most often used to conditionalize domains and categories. The
> result of the expression is a Boolean value which will be true if dom
> can be shown to **satisfy** the category, and false otherwise.
> ...
> The evaluation of this expression is made at run-time, ...
>
> ** my emphasis. Type satisfaction is defined in section 7.7:
>
> "We say that a type S satisfies the type T if any value of type S can
> be used in any context which requires a value of type T."
The compiler seems to have problems with that specification. I had a
discussion about this with Antoine Hersen today.
---BEGIN aaa9.as
#include "aldor"
#include "aldorio"
define CatA(s: String): Category == with;
A(s: String): CatA(s) == add;
stdout << (A("x") has CatA("x")) << newline;
stdout << (A("y") has CatA("x")) << newline;
---END aaa9.as
>aldor -grun -laldor aaa9.as
T
T
Now let's replace
String <-- PrimitiveType
"x" <-- String
"y" <-- Integer
---BEGIN aaa10.as
#include "aldor"
#include "aldorio"
define CatA(s: PrimitiveType): Category == with;
A(s: PrimitiveType): CatA(s) == add;
stdout << (A(String) has CatA(String)) << newline;
stdout << (A(Integer) has CatA(String)) << newline;
---END aaa10.as
>aldor -grun -laldor aaa10.as
T
F
I hope that someone agrees with me that this is a bit confusing.
We had a similar thing when we discussed about "Dom has Monoid(*, 1)".
Ralf
More information about the Aldor-l
mailing list