doc-src/IsarAdvanced/Classes/Thy/code_examples/Classes.hs
changeset 24991 c6f5cc939c29
parent 24628 33137422d7fd
child 25200 f1d2e106f2fe
equal deleted inserted replaced
24990:b924fac38eec 24991:c6f5cc939c29
    18 
    18 
    19 class (Classes.Semigroup a) => Monoidl a where {
    19 class (Classes.Semigroup a) => Monoidl a where {
    20   neutral :: a;
    20   neutral :: a;
    21 };
    21 };
    22 
    22 
    23 class (Classes.Monoidl a) => Group a where {
    23 class (Classes.Monoidl a) => Monoid a where {
       
    24 };
       
    25 
       
    26 class (Classes.Monoid a) => Group a where {
    24   inverse :: a -> a;
    27   inverse :: a -> a;
    25 };
    28 };
    26 
    29 
    27 inverse_int :: Integer -> Integer;
    30 inverse_int :: Integer -> Integer;
    28 inverse_int i = negate i;
    31 inverse_int i = negate i;
    39 
    42 
    40 instance Classes.Monoidl Integer where {
    43 instance Classes.Monoidl Integer where {
    41   neutral = Classes.neutral_int;
    44   neutral = Classes.neutral_int;
    42 };
    45 };
    43 
    46 
       
    47 instance Classes.Monoid Integer where {
       
    48 };
       
    49 
    44 instance Classes.Group Integer where {
    50 instance Classes.Group Integer where {
    45   inverse = Classes.inverse_int;
    51   inverse = Classes.inverse_int;
    46 };
    52 };
    47 
    53 
    48 pow_nat :: (Classes.Group b) => Classes.Nat -> b -> b;
    54 pow_nat :: (Classes.Monoid a) => Classes.Nat -> a -> a;
    49 pow_nat (Classes.Suc n) x = Classes.mult x (Classes.pow_nat n x);
    55 pow_nat (Classes.Suc n) x = Classes.mult x (Classes.pow_nat n x);
    50 pow_nat Classes.Zero_nat x = Classes.neutral;
    56 pow_nat Classes.Zero_nat x = Classes.neutral;
    51 
    57 
    52 pow_int :: (Classes.Group a) => Integer -> a -> a;
    58 pow_int :: (Classes.Group a) => Integer -> a -> a;
    53 pow_int k x =
    59 pow_int k x =