1 /* -*- mode: hugs-c; -*- */
2 extern Void linkPreludeTC Args((Void));
3 extern Void linkPreludeCM Args((Void));
4 extern Void linkPreludeNames Args((Void));
6 extern Module modulePreludeHugs;
8 /* --------------------------------------------------------------------------
9 * Primitive constructor functions
10 * ------------------------------------------------------------------------*/
12 extern Name nameFalse, nameTrue;
13 extern Name nameNil, nameCons;
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 */
21 extern Name nameStrict, nameSeq; /* Members of class Eval */
25 extern Name nameRunIO;
26 extern Name namePrint;
28 extern Name nameForce;
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 */
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,...}.
41 #define boxingConRep(con) ((AsmRep)(name(con).primop))
42 #define isBoxingCon(con) (isName(con) && boxingConRep(con) != 0)
47 extern Name nameMkInt64;
58 extern Name nameMkStable;
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.
65 #ifdef PROVIDE_INTEGER
66 extern Name nameMkInteger;
69 extern Name nameMkPrimArray;
70 extern Name nameMkPrimByteArray;
71 extern Name nameMkRef;
72 extern Name nameMkPrimMutableArray;
73 extern Name nameMkPrimMutableByteArray;
75 #ifdef PROVIDE_FOREIGN
76 extern Name nameMkForeign;
79 extern Name nameMkWeak;
81 #ifdef PROVIDE_CONCURRENT
82 extern Name nameMkThreadId;
83 extern Name nameMkMVar;
86 extern Type typeArrow; /* Builtin type constructors */
88 #define fn(from,to) ap2(typeArrow,from,to) /* make type: from -> to */
90 /* For every primitive type provided by the runtime system,
91 * we construct a Haskell type using a declaration of the form:
93 * data Int -- no constructors given
98 extern Type typeInt64;
100 #ifdef PROVIDE_INTEGER
101 extern Type typeInteger;
104 extern Type typeWord;
107 extern Type typeAddr;
111 Type typePrimByteArray;
113 Type typePrimMutableArray;
114 Type typePrimMutableByteArray;
116 extern Type typeFloat;
117 extern Type typeDouble;
118 #ifdef PROVIDE_STABLE
119 extern Type typeStable;
122 extern Type typeWeak;
124 #ifdef PROVIDE_FOREIGN
125 extern Type typeForeign;
127 #ifdef PROVIDE_CONCURRENT
128 extern Type typeThreadId;
129 extern Type typeMVar;
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;
139 extern Type typeException;
141 /* copied out of K&R2, Appendix A */
142 #define cat(x,y) x ## y
143 #define xcat(x,y) cat(x,y)
146 #define typeBignum xcat(type,BIGNUMTYPE)
147 #define nameMkBignum xcat(nameMk,BIGNUMTYPE)
149 #warning BIGNUMTYPE undefined
152 extern List stdDefaults; /* List of standard default types */
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;
162 extern Class classEval;
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;
173 extern Class classMonad; /* Monads and monads with a zero */
174 extern Class classMonad0;
176 /* used in typechecker */
177 extern Name nameError;
180 /* used while desugaring */
182 extern Name nameOtherwise;
183 extern Name nameUndefined; /* generic undefined value */
185 /* used in pattern match */
187 extern Name namePmSub;
191 /* used in translation */
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;