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 #ifdef PROVIDE_FOREIGN
32 extern Name nameMkForeign;
35 extern Name nameMkWeak;
37 #ifdef PROVIDE_CONCURRENT
38 extern Name nameMkThreadId;
39 extern Name nameMkMVar;
42 /* For every primitive type provided by the runtime system,
43 * we construct a Haskell type using a declaration of the form:
45 * data Int -- no constructors given
49 extern Type typeInteger;
52 extern Type typePrimArray;
53 extern Type typePrimByteArray;
55 extern Type typePrimMutableArray;
56 extern Type typePrimMutableByteArray;
57 extern Type typeFloat;
58 extern Type typeDouble;
59 extern Type typeStable;
63 #ifdef PROVIDE_FOREIGN
64 extern Type typeForeign;
66 #ifdef PROVIDE_CONCURRENT
67 extern Type typeThreadId;
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 nameEqInt;
96 extern Name nameEqInteger;
97 extern Name nameEqDouble;
98 extern Name namePmInt;
99 extern Name namePmInteger;
100 extern Name namePmDouble;
101 extern Name namePmLe;
102 extern Name namePmSubtract;
103 extern Name namePmFromInteger;
104 extern Name nameMkIO;
105 extern Name nameRunST;
106 extern Name nameUnpackString;
107 extern Name namePrimSeq;
109 extern Name nameMinus;
112 extern Type arrow; /* mkOffset(0) -> mkOffset(1) */
113 extern Type listof; /* [ mkOffset(0) ] */
114 extern Cell predNum; /* Num (mkOffset(0)) */
115 extern Cell predFractional; /* Fractional (mkOffset(0)) */
116 extern Cell predIntegral; /* Integral (mkOffset(0)) */
117 extern Cell predMonad; /* Monad (mkOffset(0)) */
120 extern Type arrow; /* mkOffset(0) -> mkOffset(1) */
121 extern Type boundPair;; /* (mkOffset(0),mkOffset(0)) */
122 extern Type listof;; /* [ mkOffset(0) ] */
123 extern Type typeVarToVar;; /* mkOffset(0) -> mkOffset(0) */
125 extern Cell predNum;; /* Num (mkOffset(0)) */
126 extern Cell predFractional;; /* Fractional (mkOffset(0)) */
127 extern Cell predIntegral;; /* Integral (mkOffset(0)) */
128 extern Kind starToStar;; /* Type -> Type */
129 extern Cell predMonad;; /* Monad (mkOffset(0)) */