5 extern Name namePutStr;
6 extern Name nameRunIO_toplevel;
9 /* The following data constructors are used to box unboxed
10 * arguments and are treated differently by the code generator.
11 * That is, they have primop `elem` {INT_REP,FLOAT_REP,...}.
13 #define boxingConRep(con) ((AsmRep)(name(con).primop))
14 #define isBoxingCon(con) (isName(con) && boxingConRep(con) != 0)
22 extern Name nameMkStable;
24 /* The following data constructors are used to make boxed but
25 * unpointed values pointed and require no special treatment
26 * by the code generator.
28 extern Name nameMkInteger;
29 extern Name nameMkPrimArray;
30 extern Name nameMkPrimByteArray;
31 extern Name nameMkRef;
32 extern Name nameMkPrimMutableArray;
33 extern Name nameMkPrimMutableByteArray;
34 extern Name nameMkThreadId;
35 extern Name nameMkPrimMVar;
36 #ifdef PROVIDE_FOREIGN
37 extern Name nameMkForeign;
40 extern Name nameMkWeak;
44 /* For every primitive type provided by the runtime system,
45 * we construct a Haskell type using a declaration of the form:
47 * data Int -- no constructors given
51 extern Type typeInteger;
54 extern Type typePrimArray;
55 extern Type typePrimByteArray;
57 extern Type typePrimMutableArray;
58 extern Type typePrimMutableByteArray;
59 extern Type typeFloat;
60 extern Type typeDouble;
61 extern Type typeStable;
62 extern Type typeThreadId;
67 #ifdef PROVIDE_FOREIGN
68 extern Type typeForeign;
71 /* And a smaller number of types defined in plain Haskell */
74 extern Type typeString;
78 extern Type typeException;
80 /* used while desugaring */
82 extern Name nameOtherwise;
83 extern Name nameUndefined; /* generic undefined value */
85 /* used in pattern match */
87 extern Name namePmSub;
91 /* used in translation */
93 extern Name namePMFail;
94 extern Name nameEqChar;
95 extern Name nameEqInteger;
96 extern Name namePmInt;
97 extern Name namePmInteger;
98 extern Name namePmDouble;
100 extern Name namePmSubtract;
101 extern Name namePmFromInteger;
102 extern Name nameMkIO;
103 extern Name nameUnpackString;
104 extern Name namePrimSeq;
106 extern Name nameMinus;
109 extern Type arrow; /* mkOffset(0) -> mkOffset(1) */
110 extern Type listof; /* [ mkOffset(0) ] */
111 extern Cell predNum; /* Num (mkOffset(0)) */
112 extern Cell predFractional; /* Fractional (mkOffset(0)) */
113 extern Cell predIntegral; /* Integral (mkOffset(0)) */
114 extern Cell predMonad; /* Monad (mkOffset(0)) */
117 extern Type arrow; /* mkOffset(0) -> mkOffset(1) */
118 extern Type boundPair;; /* (mkOffset(0),mkOffset(0)) */
119 extern Type listof;; /* [ mkOffset(0) ] */
120 extern Type typeVarToVar;; /* mkOffset(0) -> mkOffset(0) */
122 extern Cell predNum;; /* Num (mkOffset(0)) */
123 extern Cell predFractional;; /* Fractional (mkOffset(0)) */
124 extern Cell predIntegral;; /* Integral (mkOffset(0)) */
125 extern Kind starToStar;; /* Type -> Type */
126 extern Cell predMonad;; /* Monad (mkOffset(0)) */