Carlos Aya wrote:
>I want to to this:
>------------------ umatrix.dcl 
>---------------------------------------------------------------------
>definition module UMatrix
>
>import StdArray
>// UMatrix : Unboxed matrix, elemType must be one of the available unboxed 
>types
>::UMatrix elemType | Array {#} elemType
>..
>
>but I don't know (couldn't find) how to define the abstract type UMatrix in 
>the definition module, annotated with corresponding class constraint.

Class constraints cannot be used in type definitions (synonym, algebraic,
record or abstract).

>..
>::UMatrix elemType = { rows :: Int
>                     , cols :: Int
>                     , vals :: {#} elemType
>                     }
>               
>make :: .Int .Int elemType -> .(UMatrix elemType)
>make n m v
>| n > 0 && m > 0 = { rows = n
>                   , cols = m
>                   , vals = createArray (n*m) v
>                   }
>..
>therefore the compiler complains that "internal overloading of createArray" 
>cannot be solved.
>
>My questions
>- if UMatrix e is annotated with Array {#} e, why do I need to especify that 
>in make if e appears in the return type? Isn't this inferred?

You cannot annotate UMatrix e with Array {#} e, therefore you have to
add the context Array {#} e at the end of the type of make.

Kind regards,

John van Groningen
_______________________________________________
clean-list mailing list
[email protected]
http://mailman.science.ru.nl/mailman/listinfo/clean-list

Reply via email to