[project @ 1998-12-02 13:17:09 by simonm]
[ghc-hetmet.git] / ghc / interpreter / link.h
1 /* -*- mode: hugs-c; -*- */
2 extern  Void   linkPreludeTC    Args((Void));
3 extern  Void   linkPreludeCM    Args((Void));
4 extern  Void   linkPreludeNames Args((Void));
5
6 extern Module modulePreludeHugs;
7
8 /* --------------------------------------------------------------------------
9  * Primitive constructor functions 
10  * ------------------------------------------------------------------------*/
11
12 extern Name  nameFalse, nameTrue;
13 extern Name  nameNil,   nameCons;
14 extern Name  nameUnit;
15
16 extern Name  nameFromInt, nameFromDouble;/*coercion of numerics            */
17 extern Name  nameFromInteger;
18 extern Name  nameReturn,  nameBind;     /* for translating monad comps     */
19 extern Name  nameZero;                  /* for monads with a zero          */
20 #if EVAL_INSTANCES
21 extern Name  nameStrict,  nameSeq;      /* Members of class Eval           */
22 #endif
23
24 extern Name  nameId;
25 extern Name  nameRunIO;
26 extern Name  namePrint;
27
28 extern Name nameForce;
29
30 #if TREX
31 extern Name  nameInsFld;                /* Field insertion routine         */
32 extern Type  typeRec;                   /* Record formation                */
33 extern Name  nameNoRec;                 /* The empty record                */
34 extern Type  typeNoRow;                 /* The empty row                   */
35 #endif
36
37 /* The following data constructors are used to box unboxed
38  * arguments and are treated differently by the code generator.
39  * That is, they have primop `elem` {INT_REP,FLOAT_REP,...}.
40  */
41 #define boxingConRep(con) ((AsmRep)(name(con).primop))
42 #define isBoxingCon(con) (isName(con) && boxingConRep(con) != 0)
43
44 extern Name nameMkC;
45 extern Name nameMkI;
46 #ifdef PROVIDE_INT64
47 extern Name nameMkInt64;
48 #endif
49 #ifdef PROVIDE_WORD
50 extern Name nameMkW;
51 #endif
52 #ifdef PROVIDE_ADDR
53 extern Name nameMkA;
54 #endif
55 extern Name nameMkF;
56 extern Name nameMkD;
57 #ifdef PROVIDE_STABLE
58 extern Name nameMkStable;    
59 #endif
60
61 /* The following data constructors are used to make boxed but 
62  * unpointed values pointed and require no special treatment
63  * by the code generator.
64  */
65 #ifdef PROVIDE_INTEGER
66 extern Name nameMkInteger;
67 #endif
68 #ifdef PROVIDE_ARRAY
69 extern Name nameMkPrimArray;            
70 extern Name nameMkPrimByteArray;
71 extern Name nameMkRef;                  
72 extern Name nameMkPrimMutableArray;     
73 extern Name nameMkPrimMutableByteArray; 
74 #endif
75 #ifdef PROVIDE_FOREIGN
76 extern Name nameMkForeign;   
77 #endif
78 #ifdef PROVIDE_WEAK
79 extern Name nameMkWeak;
80 #endif
81 #ifdef PROVIDE_CONCURRENT
82 extern Name nameMkThreadId;  
83 extern Name nameMkMVar;  
84 #endif
85
86 extern Type typeArrow;                  /* Builtin type constructors       */
87
88 #define fn(from,to)  ap2(typeArrow,from,to)     /* make type:  from -> to  */
89
90 /* For every primitive type provided by the runtime system,
91  * we construct a Haskell type using a declaration of the form:
92  *
93  *   data Int  -- no constructors given
94  */
95 extern Type typeChar;
96 extern Type typeInt;
97 #ifdef PROVIDE_INT64
98 extern Type typeInt64;
99 #endif
100 #ifdef PROVIDE_INTEGER
101 extern Type typeInteger;
102 #endif
103 #ifdef PROVIDE_WORD
104 extern Type typeWord;
105 #endif
106 #ifdef PROVIDE_ADDR
107 extern Type typeAddr;
108 #endif
109 #ifdef PROVIDE_ARRAY
110 Type typePrimArray;            
111 Type typePrimByteArray;
112 Type typeRef;                  
113 Type typePrimMutableArray;     
114 Type typePrimMutableByteArray; 
115 #endif
116 extern Type typeFloat;
117 extern Type typeDouble;
118 #ifdef PROVIDE_STABLE
119 extern Type typeStable;
120 #endif
121 #ifdef PROVIDE_WEAK
122 extern Type typeWeak;
123 #endif
124 #ifdef PROVIDE_FOREIGN
125 extern Type typeForeign;
126 #endif
127 #ifdef PROVIDE_CONCURRENT
128 extern Type typeThreadId;
129 extern Type typeMVar;
130 #endif
131
132 /* And a smaller number of types defined in plain Haskell */
133 extern Type typeList;
134 extern Type typeUnit;
135 extern Type typeString;
136 extern Type typeBool;
137 extern Type typeST;
138 extern Type typeIO;
139 extern Type typeException;
140
141 /* copied out of K&R2, Appendix A */
142 #define cat(x,y) x ## y
143 #define xcat(x,y) cat(x,y)
144
145 #ifdef BIGNUMTYPE
146 #define typeBignum   xcat(type,BIGNUMTYPE)
147 #define nameMkBignum xcat(nameMk,BIGNUMTYPE)
148 #else
149 #warning BIGNUMTYPE undefined
150 #endif
151
152 extern List  stdDefaults;               /* List of standard default types  */
153
154 extern Class classEq;                   /* `standard' classes              */
155 extern Class classOrd;
156 extern Class classShow;
157 extern Class classRead;
158 extern Class classIx;
159 extern Class classEnum;
160 extern Class classBounded;
161 #if EVAL_INSTANCES
162 extern Class classEval;
163 #endif
164
165 extern Class classReal;                 /* `numeric' classes               */
166 extern Class classIntegral;
167 extern Class classRealFrac;
168 extern Class classRealFloat;
169 extern Class classFractional;
170 extern Class classFloating;
171 extern Class classNum;
172
173 extern Class classMonad;                /* Monads and monads with a zero   */
174 extern Class classMonad0;
175
176 /* used in typechecker */
177 extern Name nameError;
178 extern Name nameInd;
179
180 /* used while desugaring */
181 extern Name nameId;
182 extern Name nameOtherwise;
183 extern Name nameUndefined;              /* generic undefined value         */
184
185 /* used in pattern match */
186 #if NPLUSK
187 extern Name namePmSub; 
188 #endif
189 extern Name nameSel;
190
191 /* used in translation */
192 extern Name nameEq;     
193 extern Name namePMFail;
194 extern Name nameEqChar;
195 extern Name nameEqInt;
196 extern Name nameEqInteger;
197 extern Name nameEqDouble;
198 extern Name namePmInt;
199 extern Name namePmInteger;
200 extern Name namePmDouble;
201 extern Name namePmLe;
202 extern Name namePmSubtract;
203 extern Name namePmFromInteger;
204 extern Name nameMkIO;
205 extern Name nameUnpackString;
206