6 /* The following data constructors are used to box unboxed
7 * arguments and are treated differently by the code generator.
8 * That is, they have primop `elem` {INT_REP,FLOAT_REP,...}.
10 #define boxingConRep(con) ((AsmRep)(name(con).primop))
11 #define isBoxingCon(con) (isName(con) && boxingConRep(con) != 0)
19 extern Name nameMkStable;
21 /* The following data constructors are used to make boxed but
22 * unpointed values pointed and require no special treatment
23 * by the code generator.
25 extern Name nameMkInteger;
26 extern Name nameMkPrimArray;
27 extern Name nameMkPrimByteArray;
28 extern Name nameMkRef;
29 extern Name nameMkPrimMutableArray;
30 extern Name nameMkPrimMutableByteArray;
31 extern Name nameMkThreadId;
32 extern Name nameMkPrimMVar;
33 #ifdef PROVIDE_FOREIGN
34 extern Name nameMkForeign;
37 extern Name nameMkWeak;
41 /* For every primitive type provided by the runtime system,
42 * we construct a Haskell type using a declaration of the form:
44 * data Int -- no constructors given
48 extern Type typeInteger;
51 extern Type typePrimArray;
52 extern Type typePrimByteArray;
54 extern Type typePrimMutableArray;
55 extern Type typePrimMutableByteArray;
56 extern Type typeFloat;
57 extern Type typeDouble;
58 extern Type typeStable;
59 extern Type typeThreadId;
64 #ifdef PROVIDE_FOREIGN
65 extern Type typeForeign;
68 /* And a smaller number of types defined in plain Haskell */
71 extern Type typeString;
75 extern Type typeException;
77 /* used while desugaring */
79 extern Name nameOtherwise;
80 extern Name nameUndefined; /* generic undefined value */
82 /* used in pattern match */
84 extern Name namePmSub;
88 /* used in translation */
90 extern Name namePMFail;
91 extern Name nameEqChar;
92 extern Name nameEqInt;
93 extern Name nameEqInteger;
94 extern Name nameEqDouble;
95 extern Name namePmInt;
96 extern Name namePmInteger;
97 extern Name namePmDouble;
99 extern Name namePmSubtract;
100 extern Name namePmFromInteger;
101 extern Name nameMkIO;
102 extern Name nameRunST;
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)) */