1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
  | 
module Prelude.Num (
  NumPlustype-class `Prelude.Num.NumPlus`
   arguments: ('a :: *)(..)class-constant `(+)`
,
  NumMinustype-class `Prelude.Num.NumMinus`
   arguments: ('a :: *)(..)class-constant `(-)`
,
  NumMulttype-class `Prelude.Num.NumMult`
   arguments: ('a :: *)(..)class-constant `(*)`
,
  NumDivtype-class `Prelude.Num.NumDiv`
   arguments: ('a :: *)(..)class-constant `(/)`
,
  NumDivModtype-class `Prelude.Num.NumDivMod`
   arguments: ('a :: *)(..)class-constant `div`
class-constant `divmod`
class-constant `mod`
,
  Naturaldatatype `Prelude.Num.Natural`
   kind `*`
   executable(..)case-constant `caseNatural`
constructor `Zero`
constructor `Suc`
) where
{-# NoImplicitPrelude #-}
import Prelude.Bool
import Prelude.Default
import Prelude.Eq
import Prelude.Ord
import Prelude.Literal
import Prelude.Tuple
datatype rec Naturaldatatype `Prelude.Num.Natural`
   kind `*`
   executable :=
    Zero
  | Suc Naturaldatatype `Prelude.Num.Natural`
   kind `*`
   executable
instance Defaulttype-class `Prelude.Default.Default`
   arguments: ('a :: *)
   has default derive templates Naturaldatatype `Prelude.Num.Natural`
   kind `*`
   executable where
  define defaultconstant `Prelude.Default.default`
   constant of type-class instance `Default Natural`
   type `Natural`
   executable := Zeroconstant `Prelude.Num.Zero`
   constructor of datatype `Natural`
   type `Natural`
   executable
  {-# inline defaultconstant `Prelude.Default.default`
   constant of type-class instance `Default Natural`
   type `Natural`
   executable #-}
end-instance
derive Naturaldatatype `Prelude.Num.Natural`
   kind `*`
   executable instances (EqPtype-class `Prelude.Eq.EqP`
   arguments: ('a :: *)
   has default derive templates
   derive-template labels
     - eq (only deriving)
     - full generated code:
instance EqP Natural where
  define non-exec (===) x y := bool2prop (x == y)
end-instance
, Eqtype-class `Prelude.Eq.Eq`
   arguments: ('a :: *)
   super-class constraints:
     - Prelude.Eq.EqP 'a
   has default derive templates generated code:
instance Eq Natural where
  define rec (==) Zero Zero := True
           | (==) (Suc x1) (Suc y1) := (x1 == y1)
           | (==) _ _ := False
end-instance
, Ordtype-class `Prelude.Ord.Ord`
   arguments: ('a :: *)
   super-class constraints:
     - Prelude.Eq.Eq 'a
   has default derive templates generated code:
instance Ord Natural where
  define rec compare Zero Zero := EQ
           | compare Zero _ := LT
           | compare _ Zero := GT
           | compare (Suc x1) (Suc y1) := compare x1 y1
end-instance
)
class NumPlus 'atype-variable `'a`
   kind `*` where
  declare (+)constant `Prelude.Num.(+)`
   constant of type-class `NumPlus`
   type `'a -> 'a -> 'a`
   executable :: 'atype-variable `'a`
   kind `*` -> 'atype-variable `'a`
   kind `*` -> 'atype-variable `'a`
   kind `*`
end-class
class NumMinus 'atype-variable `'a`
   kind `*` where
  declare (-)constant `Prelude.Num.(-)`
   constant of type-class `NumMinus`
   type `'a -> 'a -> 'a`
   executable :: 'atype-variable `'a`
   kind `*` -> 'atype-variable `'a`
   kind `*` -> 'atype-variable `'a`
   kind `*`
end-class
class NumMult 'atype-variable `'a`
   kind `*` where
  declare (*)constant `Prelude.Num.(*)`
   constant of type-class `NumMult`
   type `'a -> 'a -> 'a`
   executable :: 'atype-variable `'a`
   kind `*` -> 'atype-variable `'a`
   kind `*` -> 'atype-variable `'a`
   kind `*`
end-class
class NumDiv 'atype-variable `'a`
   kind `*` where
  declare (/)constant `Prelude.Num.(/)`
   constant of type-class `NumDiv`
   type `'a -> 'a -> 'a`
   executable :: 'atype-variable `'a`
   kind `*` -> 'atype-variable `'a`
   kind `*` -> 'atype-variable `'a`
   kind `*`
end-class
class NumDivMod 'atype-variable `'a`
   kind `*` where
  declare divmodconstant `Prelude.Num.divmod`
   constant of type-class `NumDivMod`
   type `'a -> 'a -> ('a, 'a)`
   executable :: 'atype-variable `'a`
   kind `*` -> 'atype-variable `'a`
   kind `*` -> ('atype-variable `'a`
   kind `*`, 'atype-variable `'a`
   kind `*`)
  declare divconstant `Prelude.Num.div`
   constant of type-class `NumDivMod`
   type `'a -> 'a -> 'a`
   executable :: 'atype-variable `'a`
   kind `*` -> 'atype-variable `'a`
   kind `*` -> 'atype-variable `'a`
   kind `*`
  declare modconstant `Prelude.Num.mod`
   constant of type-class `NumDivMod`
   type `'a -> 'a -> 'a`
   executable :: 'atype-variable `'a`
   kind `*` -> 'atype-variable `'a`
   kind `*` -> 'atype-variable `'a`
   kind `*`
  define divmodconstant `Prelude.Num.divmod`
   default instance of type-class constant
   type `('a -> 'a -> 'a) -> ('a -> 'a -> 'a) -> 'a -> 'a -> ('a, 'a)`
   executable (xvariable `x`
   type `'a` :: 'atype-variable `'a`
   kind `*`) yvariable `y`
   type `'a` := (xvariable `x`
   type `'a` `div`constant `Prelude.Num.div`
   constant of type-class `NumDivMod`
   type `'a -> 'a -> 'a`
   executable
   same type-class instance yvariable `y`
   type `'a`, xvariable `x`
   type `'a` `mod`constant `Prelude.Num.mod`
   constant of type-class `NumDivMod`
   type `'a -> 'a -> 'a`
   executable
   same type-class instance yvariable `y`
   type `'a`)
  define divconstant `Prelude.Num.div`
   default instance of type-class constant
   type `('a -> 'a -> ('a, 'a)) -> 'a -> 'a -> 'a`
   executable xvariable `x`
   type `'a` yvariable `y`
   type `'a` := fstconstant `Prelude.Tuple.fst`
   constant
   type `('a, 'b) -> 'a`
   type in context `('a, 'a) -> 'a`
   executable (divmodconstant `Prelude.Num.divmod`
   constant of type-class `NumDivMod`
   type `'a -> 'a -> ('a, 'a)`
   executable
   same type-class instance xvariable `x`
   type `'a` yvariable `y`
   type `'a`)
  define modconstant `Prelude.Num.mod`
   default instance of type-class constant
   type `('a -> 'a -> ('a, 'a)) -> 'a -> 'a -> 'a`
   executable xvariable `x`
   type `'a` yvariable `y`
   type `'a` := sndconstant `Prelude.Tuple.snd`
   constant
   type `('a, 'b) -> 'b`
   type in context `('a, 'a) -> 'a`
   executable (divmodconstant `Prelude.Num.divmod`
   constant of type-class `NumDivMod`
   type `'a -> 'a -> ('a, 'a)`
   executable
   same type-class instance xvariable `x`
   type `'a` yvariable `y`
   type `'a`)
end-class
instance LiteralNumtype-class `Prelude.Literal.LiteralNum`
   arguments: ('a :: *)
   super-class constraints:
     - Prelude.Eq.Eq 'a
   statically-resolved Naturaldatatype `Prelude.Num.Natural`
   kind `*`
   executable where
  define mkLiteralNumconstant `Prelude.Literal.mkLiteralNum`
   constant of type-class instance `LiteralNum Natural`
   type `(Prelude.Literal.BuiltInNumRep, BuiltInNum) -> Natural`
   executable _ := ???type `Natural`
end-instance
instance NumPlustype-class `Prelude.Num.NumPlus`
   arguments: ('a :: *) Naturaldatatype `Prelude.Num.Natural`
   kind `*`
   executable where
  define rec (+)constant `Prelude.Num.(+)`
   constant of type-class instance `NumPlus Natural`
   type `Natural -> Natural -> Natural`
   executable nvariable `n`
   type `Natural` Zeroconstant `Prelude.Num.Zero`
   constructor of datatype `Natural`
   type `Natural`
   executable := nvariable `n`
   type `Natural`
           | (+)constant `Prelude.Num.(+)`
   constant of type-class instance `NumPlus Natural`
   type `Natural -> Natural -> Natural`
   executable nvariable `n`
   type `Natural` (Succonstant `Prelude.Num.Suc`
   constructor of datatype `Natural`
   type `Natural -> Natural`
   executable mvariable `m`
   type `Natural`) := (+)constant `Prelude.Num.(+)` (recursive usage)
   constant of type-class `NumPlus`
   type `'a -> 'a -> 'a`
   type in context `Natural -> Natural -> Natural`
   executable
   same type-class instance (Succonstant `Prelude.Num.Suc`
   constructor of datatype `Natural`
   type `Natural -> Natural`
   executable nvariable `n`
   type `Natural`) mvariable `m`
   type `Natural`
end-instance
instance NumMinustype-class `Prelude.Num.NumMinus`
   arguments: ('a :: *) Naturaldatatype `Prelude.Num.Natural`
   kind `*`
   executable where
  define rec (-)constant `Prelude.Num.(-)`
   constant of type-class instance `NumMinus Natural`
   type `Natural -> Natural -> Natural`
   executable nvariable `n`
   type `Natural` Zeroconstant `Prelude.Num.Zero`
   constructor of datatype `Natural`
   type `Natural`
   executable := nvariable `n`
   type `Natural`
           | (-)constant `Prelude.Num.(-)`
   constant of type-class instance `NumMinus Natural`
   type `Natural -> Natural -> Natural`
   executable Zeroconstant `Prelude.Num.Zero`
   constructor of datatype `Natural`
   type `Natural`
   executable _ := Zeroconstant `Prelude.Num.Zero`
   constructor of datatype `Natural`
   type `Natural`
   executable
           | (-)constant `Prelude.Num.(-)`
   constant of type-class instance `NumMinus Natural`
   type `Natural -> Natural -> Natural`
   executable (Succonstant `Prelude.Num.Suc`
   constructor of datatype `Natural`
   type `Natural -> Natural`
   executable nvariable `n`
   type `Natural`) (Succonstant `Prelude.Num.Suc`
   constructor of datatype `Natural`
   type `Natural -> Natural`
   executable mvariable `m`
   type `Natural`) := (-)constant `Prelude.Num.(-)` (recursive usage)
   constant of type-class `NumMinus`
   type `'a -> 'a -> 'a`
   type in context `Natural -> Natural -> Natural`
   executable
   same type-class instance nvariable `n`
   type `Natural` mvariable `m`
   type `Natural`
end-instance
instance NumMulttype-class `Prelude.Num.NumMult`
   arguments: ('a :: *) Naturaldatatype `Prelude.Num.Natural`
   kind `*`
   executable where
  define rec (*)constant `Prelude.Num.(*)`
   constant of type-class instance `NumMult Natural`
   type `Natural -> Natural -> Natural`
   executable _ Zeroconstant `Prelude.Num.Zero`
   constructor of datatype `Natural`
   type `Natural`
   executable := Zeroconstant `Prelude.Num.Zero`
   constructor of datatype `Natural`
   type `Natural`
   executable
           | (*)constant `Prelude.Num.(*)`
   constant of type-class instance `NumMult Natural`
   type `Natural -> Natural -> Natural`
   executable nvariable `n`
   type `Natural` (Succonstant `Prelude.Num.Suc`
   constructor of datatype `Natural`
   type `Natural -> Natural`
   executable mvariable `m`
   type `Natural`) := (nvariable `n`
   type `Natural` +constant `Prelude.Num.(+)`
   constant of type-class `NumPlus`
   type `'a -> 'a -> 'a`
   type in context `Natural -> Natural -> Natural`
   executable
   statically resolved type-class instance (nvariable `n`
   type `Natural` *constant `Prelude.Num.(*)` (recursive usage)
   constant of type-class `NumMult`
   type `'a -> 'a -> 'a`
   type in context `Natural -> Natural -> Natural`
   executable
   same type-class instance mvariable `m`
   type `Natural`))
end-instance
instance NumDivModtype-class `Prelude.Num.NumDivMod`
   arguments: ('a :: *) Naturaldatatype `Prelude.Num.Natural`
   kind `*`
   executable where
  define rec divmodconstant `Prelude.Num.divmod`
   constant of type-class instance `NumDivMod Natural`
   type `Natural -> Natural -> (Natural, Natural)`
   executable _ Zeroconstant `Prelude.Num.Zero`
   constructor of datatype `Natural`
   type `Natural`
   executable := ???type `(Natural, Natural)`
           | divmodconstant `Prelude.Num.divmod`
   constant of type-class instance `NumDivMod Natural`
   type `Natural -> Natural -> (Natural, Natural)`
   executable xvariable `x`
   type `Natural` yvariable `y`
   type `Natural` :=
                if xvariable `x`
   type `Natural` <constant `Prelude.Ord.(<)`
   constant of type-class `Ord`
   type `'a -> 'a -> Bool`
   type in context `Natural -> Natural -> Bool`
   executable
   statically resolved type-class instance yvariable `y`
   type `Natural` then
                  (0natural number literal
   type `Natural`
   decimal value: 0
   hexadecimal value: 0x0
   octal value: 0o0
   binary value: 0b0, xvariable `x`
   type `Natural`)
                else
                  let
                    val (dvariable `d`
   type `Natural`, mvariable `m`
   type `Natural`) = divmodconstant `Prelude.Num.divmod` (recursive usage)
   constant of type-class `NumDivMod`
   type `'a -> 'a -> ('a, 'a)`
   type in context `Natural -> Natural -> (Natural, Natural)`
   executable
   same type-class instance (xvariable `x`
   type `Natural` -constant `Prelude.Num.(-)`
   constant of type-class `NumMinus`
   type `'a -> 'a -> 'a`
   type in context `Natural -> Natural -> Natural`
   executable
   statically resolved type-class instance yvariable `y`
   type `Natural`) yvariable `y`
   type `Natural`
                  in (dvariable `d`
   type `Natural`+constant `Prelude.Num.(+)`
   constant of type-class `NumPlus`
   type `'a -> 'a -> 'a`
   type in context `Natural -> Natural -> Natural`
   executable
   statically resolved type-class instance1natural number literal
   type `Natural`
   decimal value: 1
   hexadecimal value: 0x1
   octal value: 0o1
   binary value: 0b1, mvariable `m`
   type `Natural`) end
end-instance
instance NumDivtype-class `Prelude.Num.NumDiv`
   arguments: ('a :: *) Naturaldatatype `Prelude.Num.Natural`
   kind `*`
   executable where
  define (/)constant `Prelude.Num.(/)`
   constant of type-class instance `NumDiv Natural`
   type `Natural -> Natural -> Natural`
   executable := divconstant `Prelude.Num.div`
   constant of type-class `NumDivMod`
   type `'a -> 'a -> 'a`
   type in context `Natural -> Natural -> Natural`
   executable
   statically resolved type-class instance
  {-# inline (/)constant `Prelude.Num.(/)`
   constant of type-class instance `NumDiv Natural`
   type `Natural -> Natural -> Natural`
   executable #-}
end-instance
instance LiteralNumtype-class `Prelude.Literal.LiteralNum`
   arguments: ('a :: *)
   super-class constraints:
     - Prelude.Eq.Eq 'a
   statically-resolved Booldatatype `Prelude.Bool.Bool`
   kind `*`
   executable where
  define mkLiteralNumconstant `Prelude.Literal.mkLiteralNum`
   constant of type-class instance `LiteralNum Bool`
   type `(Prelude.Literal.BuiltInNumRep, BuiltInNum) -> Bool`
   executable (_, 0natural number literal
   type `BuiltInNum`
   decimal value: 0
   hexadecimal value: 0x0
   octal value: 0o0
   binary value: 0b0) := Falseconstant `Prelude.Bool.False`
   constructor of datatype `Bool`
   type `Bool`
   executable
       | mkLiteralNumconstant `Prelude.Literal.mkLiteralNum`
   constant of type-class instance `LiteralNum Bool`
   type `(Prelude.Literal.BuiltInNumRep, BuiltInNum) -> Bool`
   executable (_, _) := Trueconstant `Prelude.Bool.True`
   constructor of datatype `Bool`
   type `Bool`
   executable
  {-# set-num-literal-boundaries 0 1 #-}
end-instance
end-moduleend of module Prelude.Num
 |