
generic

  type Scalar is private;

  with procedure Assign(K: in Integer; S: in out Scalar) is <>;
  with procedure Copy(S1: in Scalar; S2: in out Scalar) is <>;
  with procedure Prod(S1,S2: in Scalar; S3: in out Scalar) is <>;
  with procedure Mult(S1: in Scalar; S2: in out Scalar) is <>;
  with procedure Sqr(S: in out Scalar) is <>;
  with procedure Inv(S1: in Scalar; S2: in out Scalar) is <>;

package IPowers is

  procedure IPower(I: in Integer; S1: in Scalar; S2,Tmp: in out Scalar); -- S2 = S1**I
  procedure IPower(I: in Integer; S1: in Scalar; S2: in out Scalar);     -- S2 = S1**I

end IPowers;
