On Mon, 13 Aug 2007, William Sit wrote: | | | Gabriel Dos Reis wrote: | | > On Sun, 12 Aug 2007, William Sit wrote: | > | > | Isn't the problem whether 'Monad has SetCategory with "*":(%,%)->%' ? | > | > If the question is formulated in terms of "has", then I think the answer | > is unambiguously "yes". | > | > But, is that the way the compiler is intended or does the matching of | > actual arguments with formal parameters? | > | > It seems to me that the compiler asks the question in terms of coercible, | > instead of "has". | > | > -- Gaby | | I believe for category parameters, the compiler checks whether the supplied domain | "has" the category, and for domain parameters, the compiler checks whether the | object belongs to the domain, NOT whether the object is "coercible" to it.
Here is what is happenning when I trace the following functions: coerceEasy coerceSubset coerceHard coerceable compImport compExpression compForm compForm1 When compiling the default definition of ** for Monad, the compiler notices that expt comes from RepeatedSquare(S), where S is the parameter of type Monad to Monad&. If compiles all arguments x and n fine. Then it has to compile the package RepeatedSquare(S) -- as if it were a function call, since all instantiations are function calls. To achieve that it asks the question whether S (of type Monad) is coercible to SetCategory with "*": (%, %) -> % And the definition of coercible does not permit to return "yes". -- Gaby _______________________________________________ Axiom-developer mailing list Axiom-developer@nongnu.org http://lists.nongnu.org/mailman/listinfo/axiom-developer