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)
20 extern Name nameMkStable;
23 /* The following data constructors are used to make boxed but
24 * unpointed values pointed and require no special treatment
25 * by the code generator.
27 extern Name nameMkInteger;
28 extern Name nameMkPrimArray;
29 extern Name nameMkPrimByteArray;
30 extern Name nameMkRef;
31 extern Name nameMkPrimMutableArray;
32 extern Name nameMkPrimMutableByteArray;
33 #ifdef PROVIDE_FOREIGN
34 extern Name nameMkForeign;
37 extern Name nameMkWeak;
39 #ifdef PROVIDE_CONCURRENT
40 extern Name nameMkThreadId;
41 extern Name nameMkMVar;
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;
62 extern Type typeStable;
67 #ifdef PROVIDE_FOREIGN
68 extern Type typeForeign;
70 #ifdef PROVIDE_CONCURRENT
71 extern Type typeThreadId;
75 /* And a smaller number of types defined in plain Haskell */
78 extern Type typeString;
82 extern Type typeException;
84 /* used while desugaring */
86 extern Name nameOtherwise;
87 extern Name nameUndefined; /* generic undefined value */
89 /* used in pattern match */
91 extern Name namePmSub;
95 /* used in translation */
97 extern Name namePMFail;
98 extern Name nameEqChar;
99 extern Name nameEqInt;
100 extern Name nameEqInteger;
101 extern Name nameEqDouble;
102 extern Name namePmInt;
103 extern Name namePmInteger;
104 extern Name namePmDouble;
105 extern Name namePmLe;
106 extern Name namePmSubtract;
107 extern Name namePmFromInteger;
108 extern Name nameMkIO;
109 extern Name nameUnpackString;
110 extern Name namePrimSeq;
112 extern Name nameMinus;
115 extern Type arrow; /* mkOffset(0) -> mkOffset(1) */
116 extern Type listof; /* [ mkOffset(0) ] */
117 extern Cell predNum; /* Num (mkOffset(0)) */
118 extern Cell predFractional; /* Fractional (mkOffset(0)) */
119 extern Cell predIntegral; /* Integral (mkOffset(0)) */
120 extern Cell predMonad; /* Monad (mkOffset(0)) */
123 extern Type arrow; /* mkOffset(0) -> mkOffset(1) */
124 extern Type boundPair;; /* (mkOffset(0),mkOffset(0)) */
125 extern Type listof;; /* [ mkOffset(0) ] */
126 extern Type typeVarToVar;; /* mkOffset(0) -> mkOffset(0) */
128 extern Cell predNum;; /* Num (mkOffset(0)) */
129 extern Cell predFractional;; /* Fractional (mkOffset(0)) */
130 extern Cell predIntegral;; /* Integral (mkOffset(0)) */
131 extern Kind starToStar;; /* Type -> Type */
132 extern Cell predMonad;; /* Monad (mkOffset(0)) */