Import Upstream version 20180207
[hcoop/debian/mlton.git] / basis-library / integer / num1.sml
1 (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh
2 * Jagannathan, and Stephen Weeks.
3 * Copyright (C) 1997-2000 NEC Research Institute.
4 *
5 * MLton is released under a BSD-style license.
6 * See the file MLton-LICENSE for details.
7 *)
8
9 signature MKNUM1_ARG =
10 sig
11 type num
12
13 val zextdFromInt8: Primitive.Int8.int -> num
14 val zextdFromInt16: Primitive.Int16.int -> num
15 val zextdFromInt32: Primitive.Int32.int -> num
16 val zextdFromInt64: Primitive.Int64.int -> num
17 val zextdFromIntInf: Primitive.IntInf.int -> num
18 val zextdFromWord8: Primitive.Word8.word -> num
19 val zextdFromWord16: Primitive.Word16.word -> num
20 val zextdFromWord32: Primitive.Word32.word -> num
21 val zextdFromWord64: Primitive.Word64.word -> num
22 val zextdToInt8: num -> Primitive.Int8.int
23 val zextdToInt16: num -> Primitive.Int16.int
24 val zextdToInt32: num -> Primitive.Int32.int
25 val zextdToInt64: num -> Primitive.Int64.int
26 val zextdToIntInf: num -> Primitive.IntInf.int
27 val zextdToWord8: num -> Primitive.Word8.word
28 val zextdToWord16: num -> Primitive.Word16.word
29 val zextdToWord32: num -> Primitive.Word32.word
30 val zextdToWord64: num -> Primitive.Word64.word
31
32 val sextdFromInt8: Primitive.Int8.int -> num
33 val sextdFromInt16: Primitive.Int16.int -> num
34 val sextdFromInt32: Primitive.Int32.int -> num
35 val sextdFromInt64: Primitive.Int64.int -> num
36 val sextdFromIntInf: Primitive.IntInf.int -> num
37 val sextdFromWord8: Primitive.Word8.word -> num
38 val sextdFromWord16: Primitive.Word16.word -> num
39 val sextdFromWord32: Primitive.Word32.word -> num
40 val sextdFromWord64: Primitive.Word64.word -> num
41 val sextdToInt8: num -> Primitive.Int8.int
42 val sextdToInt16: num -> Primitive.Int16.int
43 val sextdToInt32: num -> Primitive.Int32.int
44 val sextdToInt64: num -> Primitive.Int64.int
45 val sextdToIntInf: num -> Primitive.IntInf.int
46 val sextdToWord8: num -> Primitive.Word8.word
47 val sextdToWord16: num -> Primitive.Word16.word
48 val sextdToWord32: num -> Primitive.Word32.word
49 val sextdToWord64: num -> Primitive.Word64.word
50
51 val castFromInt8: Primitive.Int8.int -> num
52 val castFromInt16: Primitive.Int16.int -> num
53 val castFromInt32: Primitive.Int32.int -> num
54 val castFromInt64: Primitive.Int64.int -> num
55 val castFromIntInf: Primitive.IntInf.int -> num
56 val castFromWord8: Primitive.Word8.word -> num
57 val castFromWord16: Primitive.Word16.word -> num
58 val castFromWord32: Primitive.Word32.word -> num
59 val castFromWord64: Primitive.Word64.word -> num
60 val castToInt8: num -> Primitive.Int8.int
61 val castToInt16: num -> Primitive.Int16.int
62 val castToInt32: num -> Primitive.Int32.int
63 val castToInt64: num -> Primitive.Int64.int
64 val castToIntInf: num -> Primitive.IntInf.int
65 val castToWord8: num -> Primitive.Word8.word
66 val castToWord16: num -> Primitive.Word16.word
67 val castToWord32: num -> Primitive.Word32.word
68 val castToWord64: num -> Primitive.Word64.word
69
70 val zchckFromInt8: Primitive.Int8.int -> num
71 val zchckFromInt16: Primitive.Int16.int -> num
72 val zchckFromInt32: Primitive.Int32.int -> num
73 val zchckFromInt64: Primitive.Int64.int -> num
74 val zchckFromIntInf: Primitive.IntInf.int -> num
75 val zchckFromWord8: Primitive.Word8.word -> num
76 val zchckFromWord16: Primitive.Word16.word -> num
77 val zchckFromWord32: Primitive.Word32.word -> num
78 val zchckFromWord64: Primitive.Word64.word -> num
79 val zchckToInt8: num -> Primitive.Int8.int
80 val zchckToInt16: num -> Primitive.Int16.int
81 val zchckToInt32: num -> Primitive.Int32.int
82 val zchckToInt64: num -> Primitive.Int64.int
83 val zchckToIntInf: num -> Primitive.IntInf.int
84 val zchckToWord8: num -> Primitive.Word8.word
85 val zchckToWord16: num -> Primitive.Word16.word
86 val zchckToWord32: num -> Primitive.Word32.word
87 val zchckToWord64: num -> Primitive.Word64.word
88
89 val schckFromInt8: Primitive.Int8.int -> num
90 val schckFromInt16: Primitive.Int16.int -> num
91 val schckFromInt32: Primitive.Int32.int -> num
92 val schckFromInt64: Primitive.Int64.int -> num
93 val schckFromIntInf: Primitive.IntInf.int -> num
94 val schckFromWord8: Primitive.Word8.word -> num
95 val schckFromWord16: Primitive.Word16.word -> num
96 val schckFromWord32: Primitive.Word32.word -> num
97 val schckFromWord64: Primitive.Word64.word -> num
98 val schckToInt8: num -> Primitive.Int8.int
99 val schckToInt16: num -> Primitive.Int16.int
100 val schckToInt32: num -> Primitive.Int32.int
101 val schckToInt64: num -> Primitive.Int64.int
102 val schckToIntInf: num -> Primitive.IntInf.int
103 val schckToWord8: num -> Primitive.Word8.word
104 val schckToWord16: num -> Primitive.Word16.word
105 val schckToWord32: num -> Primitive.Word32.word
106 val schckToWord64: num -> Primitive.Word64.word
107 end
108 signature MKNUM1_RES =
109 sig
110 type num
111
112 val zextdFromInt: Int.int -> num
113 val zextdToInt: num -> Int.int
114 val sextdFromInt: Int.int -> num
115 val sextdToInt: num -> Int.int
116 val castFromInt: Int.int -> num
117 val castToInt: num -> Int.int
118 val zchckFromInt: Int.int -> num
119 val zchckToInt: num -> Int.int
120 val schckFromInt: Int.int -> num
121 val schckToInt: num -> Int.int
122
123 val zextdFromFixedInt: FixedInt.int -> num
124 val zextdToFixedInt: num -> FixedInt.int
125 val sextdFromFixedInt: FixedInt.int -> num
126 val sextdToFixedInt: num -> FixedInt.int
127 val castFromFixedInt: FixedInt.int -> num
128 val castToFixedInt: num -> FixedInt.int
129 val zchckFromFixedInt: FixedInt.int -> num
130 val zchckToFixedInt: num -> FixedInt.int
131 val schckFromFixedInt: FixedInt.int -> num
132 val schckToFixedInt: num -> FixedInt.int
133
134 val zextdFromLargeInt: LargeInt.int -> num
135 val zextdToLargeInt: num -> LargeInt.int
136 val sextdFromLargeInt: LargeInt.int -> num
137 val sextdToLargeInt: num -> LargeInt.int
138 val castFromLargeInt: LargeInt.int -> num
139 val castToLargeInt: num -> LargeInt.int
140 val zchckFromLargeInt: LargeInt.int -> num
141 val zchckToLargeInt: num -> LargeInt.int
142 val schckFromLargeInt: LargeInt.int -> num
143 val schckToLargeInt: num -> LargeInt.int
144
145 val zextdFromWord: Word.word -> num
146 val zextdToWord: num -> Word.word
147 val sextdFromWord: Word.word -> num
148 val sextdToWord: num -> Word.word
149 val castFromWord: Word.word -> num
150 val castToWord: num -> Word.word
151 val zchckFromWord: Word.word -> num
152 val zchckToWord: num -> Word.word
153 val schckFromWord: Word.word -> num
154 val schckToWord: num -> Word.word
155
156 val zextdFromLargeWord: LargeWord.word -> num
157 val zextdToLargeWord: num -> LargeWord.word
158 val sextdFromLargeWord: LargeWord.word -> num
159 val sextdToLargeWord: num -> LargeWord.word
160 val castFromLargeWord: LargeWord.word -> num
161 val castToLargeWord: num -> LargeWord.word
162 val zchckFromLargeWord: LargeWord.word -> num
163 val zchckToLargeWord: num -> LargeWord.word
164 val schckFromLargeWord: LargeWord.word -> num
165 val schckToLargeWord: num -> LargeWord.word
166
167 val zextdFromSysWord: SysWord.word -> num
168 val zextdToSysWord: num -> SysWord.word
169 val sextdFromSysWord: SysWord.word -> num
170 val sextdToSysWord: num -> SysWord.word
171 val castFromSysWord: SysWord.word -> num
172 val castToSysWord: num -> SysWord.word
173 val zchckFromSysWord: SysWord.word -> num
174 val zchckToSysWord: num -> SysWord.word
175 val schckFromSysWord: SysWord.word -> num
176 val schckToSysWord: num -> SysWord.word
177 end
178 signature PRIM_INTEGER =
179 sig
180 include PRIM_INTEGER
181 include MKNUM1_RES where type num = int
182 end
183 signature PRIM_WORD =
184 sig
185 include PRIM_WORD
186 include MKNUM1_RES where type num = word
187 end
188
189 functor MkNum1 (I: MKNUM1_ARG) : MKNUM1_RES =
190 struct
191 open I
192
193 local
194 structure S =
195 Int_ChooseInt
196 (type 'a t = 'a -> num
197 val fInt8 = I.zextdFromInt8
198 val fInt16 = I.zextdFromInt16
199 val fInt32 = I.zextdFromInt32
200 val fInt64 = I.zextdFromInt64
201 val fIntInf = I.zextdFromIntInf)
202 in
203 val zextdFromInt = S.f
204 end
205 local
206 structure S =
207 Int_ChooseInt
208 (type 'a t = num -> 'a
209 val fInt8 = I.zextdToInt8
210 val fInt16 = I.zextdToInt16
211 val fInt32 = I.zextdToInt32
212 val fInt64 = I.zextdToInt64
213 val fIntInf = I.zextdToIntInf)
214 in
215 val zextdToInt = S.f
216 end
217 local
218 structure S =
219 Int_ChooseInt
220 (type 'a t = 'a -> num
221 val fInt8 = I.sextdFromInt8
222 val fInt16 = I.sextdFromInt16
223 val fInt32 = I.sextdFromInt32
224 val fInt64 = I.sextdFromInt64
225 val fIntInf = I.sextdFromIntInf)
226 in
227 val sextdFromInt = S.f
228 end
229 local
230 structure S =
231 Int_ChooseInt
232 (type 'a t = num -> 'a
233 val fInt8 = I.sextdToInt8
234 val fInt16 = I.sextdToInt16
235 val fInt32 = I.sextdToInt32
236 val fInt64 = I.sextdToInt64
237 val fIntInf = I.sextdToIntInf)
238 in
239 val sextdToInt = S.f
240 end
241 local
242 structure S =
243 Int_ChooseInt
244 (type 'a t = 'a -> num
245 val fInt8 = I.castFromInt8
246 val fInt16 = I.castFromInt16
247 val fInt32 = I.castFromInt32
248 val fInt64 = I.castFromInt64
249 val fIntInf = I.castFromIntInf)
250 in
251 val castFromInt = S.f
252 end
253 local
254 structure S =
255 Int_ChooseInt
256 (type 'a t = num -> 'a
257 val fInt8 = I.castToInt8
258 val fInt16 = I.castToInt16
259 val fInt32 = I.castToInt32
260 val fInt64 = I.castToInt64
261 val fIntInf = I.castToIntInf)
262 in
263 val castToInt = S.f
264 end
265 local
266 structure S =
267 Int_ChooseInt
268 (type 'a t = 'a -> num
269 val fInt8 = I.zchckFromInt8
270 val fInt16 = I.zchckFromInt16
271 val fInt32 = I.zchckFromInt32
272 val fInt64 = I.zchckFromInt64
273 val fIntInf = I.zchckFromIntInf)
274 in
275 val zchckFromInt = S.f
276 end
277 local
278 structure S =
279 Int_ChooseInt
280 (type 'a t = num -> 'a
281 val fInt8 = I.zchckToInt8
282 val fInt16 = I.zchckToInt16
283 val fInt32 = I.zchckToInt32
284 val fInt64 = I.zchckToInt64
285 val fIntInf = I.zchckToIntInf)
286 in
287 val zchckToInt = S.f
288 end
289 local
290 structure S =
291 Int_ChooseInt
292 (type 'a t = 'a -> num
293 val fInt8 = I.schckFromInt8
294 val fInt16 = I.schckFromInt16
295 val fInt32 = I.schckFromInt32
296 val fInt64 = I.schckFromInt64
297 val fIntInf = I.schckFromIntInf)
298 in
299 val schckFromInt = S.f
300 end
301 local
302 structure S =
303 Int_ChooseInt
304 (type 'a t = num -> 'a
305 val fInt8 = I.schckToInt8
306 val fInt16 = I.schckToInt16
307 val fInt32 = I.schckToInt32
308 val fInt64 = I.schckToInt64
309 val fIntInf = I.schckToIntInf)
310 in
311 val schckToInt = S.f
312 end
313
314
315 local
316 structure S =
317 FixedInt_ChooseIntN
318 (type 'a t = 'a -> num
319 val fInt8 = I.zextdFromInt8
320 val fInt16 = I.zextdFromInt16
321 val fInt32 = I.zextdFromInt32
322 val fInt64 = I.zextdFromInt64)
323 in
324 val zextdFromFixedInt = S.f
325 end
326 local
327 structure S =
328 FixedInt_ChooseIntN
329 (type 'a t = num -> 'a
330 val fInt8 = I.zextdToInt8
331 val fInt16 = I.zextdToInt16
332 val fInt32 = I.zextdToInt32
333 val fInt64 = I.zextdToInt64)
334 in
335 val zextdToFixedInt = S.f
336 end
337 local
338 structure S =
339 FixedInt_ChooseIntN
340 (type 'a t = 'a -> num
341 val fInt8 = I.sextdFromInt8
342 val fInt16 = I.sextdFromInt16
343 val fInt32 = I.sextdFromInt32
344 val fInt64 = I.sextdFromInt64)
345 in
346 val sextdFromFixedInt = S.f
347 end
348 local
349 structure S =
350 FixedInt_ChooseIntN
351 (type 'a t = num -> 'a
352 val fInt8 = I.sextdToInt8
353 val fInt16 = I.sextdToInt16
354 val fInt32 = I.sextdToInt32
355 val fInt64 = I.sextdToInt64)
356 in
357 val sextdToFixedInt = S.f
358 end
359 local
360 structure S =
361 FixedInt_ChooseIntN
362 (type 'a t = 'a -> num
363 val fInt8 = I.castFromInt8
364 val fInt16 = I.castFromInt16
365 val fInt32 = I.castFromInt32
366 val fInt64 = I.castFromInt64)
367 in
368 val castFromFixedInt = S.f
369 end
370 local
371 structure S =
372 FixedInt_ChooseIntN
373 (type 'a t = num -> 'a
374 val fInt8 = I.castToInt8
375 val fInt16 = I.castToInt16
376 val fInt32 = I.castToInt32
377 val fInt64 = I.castToInt64)
378 in
379 val castToFixedInt = S.f
380 end
381 local
382 structure S =
383 FixedInt_ChooseIntN
384 (type 'a t = 'a -> num
385 val fInt8 = I.zchckFromInt8
386 val fInt16 = I.zchckFromInt16
387 val fInt32 = I.zchckFromInt32
388 val fInt64 = I.zchckFromInt64)
389 in
390 val zchckFromFixedInt = S.f
391 end
392 local
393 structure S =
394 FixedInt_ChooseIntN
395 (type 'a t = num -> 'a
396 val fInt8 = I.zchckToInt8
397 val fInt16 = I.zchckToInt16
398 val fInt32 = I.zchckToInt32
399 val fInt64 = I.zchckToInt64)
400 in
401 val zchckToFixedInt = S.f
402 end
403 local
404 structure S =
405 FixedInt_ChooseIntN
406 (type 'a t = 'a -> num
407 val fInt8 = I.schckFromInt8
408 val fInt16 = I.schckFromInt16
409 val fInt32 = I.schckFromInt32
410 val fInt64 = I.schckFromInt64)
411 in
412 val schckFromFixedInt = S.f
413 end
414 local
415 structure S =
416 FixedInt_ChooseIntN
417 (type 'a t = num -> 'a
418 val fInt8 = I.schckToInt8
419 val fInt16 = I.schckToInt16
420 val fInt32 = I.schckToInt32
421 val fInt64 = I.schckToInt64)
422 in
423 val schckToFixedInt = S.f
424 end
425
426
427 local
428 structure S =
429 LargeInt_ChooseInt
430 (type 'a t = 'a -> num
431 val fInt8 = I.zextdFromInt8
432 val fInt16 = I.zextdFromInt16
433 val fInt32 = I.zextdFromInt32
434 val fInt64 = I.zextdFromInt64
435 val fIntInf = I.zextdFromIntInf)
436 in
437 val zextdFromLargeInt = S.f
438 end
439 local
440 structure S =
441 LargeInt_ChooseInt
442 (type 'a t = num -> 'a
443 val fInt8 = I.zextdToInt8
444 val fInt16 = I.zextdToInt16
445 val fInt32 = I.zextdToInt32
446 val fInt64 = I.zextdToInt64
447 val fIntInf = I.zextdToIntInf)
448 in
449 val zextdToLargeInt = S.f
450 end
451 local
452 structure S =
453 LargeInt_ChooseInt
454 (type 'a t = 'a -> num
455 val fInt8 = I.sextdFromInt8
456 val fInt16 = I.sextdFromInt16
457 val fInt32 = I.sextdFromInt32
458 val fInt64 = I.sextdFromInt64
459 val fIntInf = I.sextdFromIntInf)
460 in
461 val sextdFromLargeInt = S.f
462 end
463 local
464 structure S =
465 LargeInt_ChooseInt
466 (type 'a t = num -> 'a
467 val fInt8 = I.sextdToInt8
468 val fInt16 = I.sextdToInt16
469 val fInt32 = I.sextdToInt32
470 val fInt64 = I.sextdToInt64
471 val fIntInf = I.sextdToIntInf)
472 in
473 val sextdToLargeInt = S.f
474 end
475 local
476 structure S =
477 LargeInt_ChooseInt
478 (type 'a t = 'a -> num
479 val fInt8 = I.castFromInt8
480 val fInt16 = I.castFromInt16
481 val fInt32 = I.castFromInt32
482 val fInt64 = I.castFromInt64
483 val fIntInf = I.castFromIntInf)
484 in
485 val castFromLargeInt = S.f
486 end
487 local
488 structure S =
489 LargeInt_ChooseInt
490 (type 'a t = num -> 'a
491 val fInt8 = I.castToInt8
492 val fInt16 = I.castToInt16
493 val fInt32 = I.castToInt32
494 val fInt64 = I.castToInt64
495 val fIntInf = I.castToIntInf)
496 in
497 val castToLargeInt = S.f
498 end
499 local
500 structure S =
501 LargeInt_ChooseInt
502 (type 'a t = 'a -> num
503 val fInt8 = I.zchckFromInt8
504 val fInt16 = I.zchckFromInt16
505 val fInt32 = I.zchckFromInt32
506 val fInt64 = I.zchckFromInt64
507 val fIntInf = I.zchckFromIntInf)
508 in
509 val zchckFromLargeInt = S.f
510 end
511 local
512 structure S =
513 LargeInt_ChooseInt
514 (type 'a t = num -> 'a
515 val fInt8 = I.zchckToInt8
516 val fInt16 = I.zchckToInt16
517 val fInt32 = I.zchckToInt32
518 val fInt64 = I.zchckToInt64
519 val fIntInf = I.zchckToIntInf)
520 in
521 val zchckToLargeInt = S.f
522 end
523 local
524 structure S =
525 LargeInt_ChooseInt
526 (type 'a t = 'a -> num
527 val fInt8 = I.schckFromInt8
528 val fInt16 = I.schckFromInt16
529 val fInt32 = I.schckFromInt32
530 val fInt64 = I.schckFromInt64
531 val fIntInf = I.schckFromIntInf)
532 in
533 val schckFromLargeInt = S.f
534 end
535 local
536 structure S =
537 LargeInt_ChooseInt
538 (type 'a t = num -> 'a
539 val fInt8 = I.schckToInt8
540 val fInt16 = I.schckToInt16
541 val fInt32 = I.schckToInt32
542 val fInt64 = I.schckToInt64
543 val fIntInf = I.schckToIntInf)
544 in
545 val schckToLargeInt = S.f
546 end
547
548
549 local
550 structure S =
551 Word_ChooseWordN
552 (type 'a t = 'a -> num
553 val fWord8 = I.zextdFromWord8
554 val fWord16 = I.zextdFromWord16
555 val fWord32 = I.zextdFromWord32
556 val fWord64 = I.zextdFromWord64)
557 in
558 val zextdFromWord = S.f
559 end
560 local
561 structure S =
562 Word_ChooseWordN
563 (type 'a t = num -> 'a
564 val fWord8 = I.zextdToWord8
565 val fWord16 = I.zextdToWord16
566 val fWord32 = I.zextdToWord32
567 val fWord64 = I.zextdToWord64)
568 in
569 val zextdToWord = S.f
570 end
571 local
572 structure S =
573 Word_ChooseWordN
574 (type 'a t = 'a -> num
575 val fWord8 = I.sextdFromWord8
576 val fWord16 = I.sextdFromWord16
577 val fWord32 = I.sextdFromWord32
578 val fWord64 = I.sextdFromWord64)
579 in
580 val sextdFromWord = S.f
581 end
582 local
583 structure S =
584 Word_ChooseWordN
585 (type 'a t = num -> 'a
586 val fWord8 = I.sextdToWord8
587 val fWord16 = I.sextdToWord16
588 val fWord32 = I.sextdToWord32
589 val fWord64 = I.sextdToWord64)
590 in
591 val sextdToWord = S.f
592 end
593 local
594 structure S =
595 Word_ChooseWordN
596 (type 'a t = 'a -> num
597 val fWord8 = I.castFromWord8
598 val fWord16 = I.castFromWord16
599 val fWord32 = I.castFromWord32
600 val fWord64 = I.castFromWord64)
601 in
602 val castFromWord = S.f
603 end
604 local
605 structure S =
606 Word_ChooseWordN
607 (type 'a t = num -> 'a
608 val fWord8 = I.castToWord8
609 val fWord16 = I.castToWord16
610 val fWord32 = I.castToWord32
611 val fWord64 = I.castToWord64)
612 in
613 val castToWord = S.f
614 end
615 local
616 structure S =
617 Word_ChooseWordN
618 (type 'a t = 'a -> num
619 val fWord8 = I.zchckFromWord8
620 val fWord16 = I.zchckFromWord16
621 val fWord32 = I.zchckFromWord32
622 val fWord64 = I.zchckFromWord64)
623 in
624 val zchckFromWord = S.f
625 end
626 local
627 structure S =
628 Word_ChooseWordN
629 (type 'a t = num -> 'a
630 val fWord8 = I.zchckToWord8
631 val fWord16 = I.zchckToWord16
632 val fWord32 = I.zchckToWord32
633 val fWord64 = I.zchckToWord64)
634 in
635 val zchckToWord = S.f
636 end
637 local
638 structure S =
639 Word_ChooseWordN
640 (type 'a t = 'a -> num
641 val fWord8 = I.schckFromWord8
642 val fWord16 = I.schckFromWord16
643 val fWord32 = I.schckFromWord32
644 val fWord64 = I.schckFromWord64)
645 in
646 val schckFromWord = S.f
647 end
648 local
649 structure S =
650 Word_ChooseWordN
651 (type 'a t = num -> 'a
652 val fWord8 = I.schckToWord8
653 val fWord16 = I.schckToWord16
654 val fWord32 = I.schckToWord32
655 val fWord64 = I.schckToWord64)
656 in
657 val schckToWord = S.f
658 end
659
660
661 local
662 structure S =
663 LargeWord_ChooseWordN
664 (type 'a t = 'a -> num
665 val fWord8 = I.zextdFromWord8
666 val fWord16 = I.zextdFromWord16
667 val fWord32 = I.zextdFromWord32
668 val fWord64 = I.zextdFromWord64)
669 in
670 val zextdFromLargeWord = S.f
671 end
672 local
673 structure S =
674 LargeWord_ChooseWordN
675 (type 'a t = num -> 'a
676 val fWord8 = I.zextdToWord8
677 val fWord16 = I.zextdToWord16
678 val fWord32 = I.zextdToWord32
679 val fWord64 = I.zextdToWord64)
680 in
681 val zextdToLargeWord = S.f
682 end
683 local
684 structure S =
685 LargeWord_ChooseWordN
686 (type 'a t = 'a -> num
687 val fWord8 = I.sextdFromWord8
688 val fWord16 = I.sextdFromWord16
689 val fWord32 = I.sextdFromWord32
690 val fWord64 = I.sextdFromWord64)
691 in
692 val sextdFromLargeWord = S.f
693 end
694 local
695 structure S =
696 LargeWord_ChooseWordN
697 (type 'a t = num -> 'a
698 val fWord8 = I.sextdToWord8
699 val fWord16 = I.sextdToWord16
700 val fWord32 = I.sextdToWord32
701 val fWord64 = I.sextdToWord64)
702 in
703 val sextdToLargeWord = S.f
704 end
705 local
706 structure S =
707 LargeWord_ChooseWordN
708 (type 'a t = 'a -> num
709 val fWord8 = I.castFromWord8
710 val fWord16 = I.castFromWord16
711 val fWord32 = I.castFromWord32
712 val fWord64 = I.castFromWord64)
713 in
714 val castFromLargeWord = S.f
715 end
716 local
717 structure S =
718 LargeWord_ChooseWordN
719 (type 'a t = num -> 'a
720 val fWord8 = I.castToWord8
721 val fWord16 = I.castToWord16
722 val fWord32 = I.castToWord32
723 val fWord64 = I.castToWord64)
724 in
725 val castToLargeWord = S.f
726 end
727 local
728 structure S =
729 LargeWord_ChooseWordN
730 (type 'a t = 'a -> num
731 val fWord8 = I.zchckFromWord8
732 val fWord16 = I.zchckFromWord16
733 val fWord32 = I.zchckFromWord32
734 val fWord64 = I.zchckFromWord64)
735 in
736 val zchckFromLargeWord = S.f
737 end
738 local
739 structure S =
740 LargeWord_ChooseWordN
741 (type 'a t = num -> 'a
742 val fWord8 = I.zchckToWord8
743 val fWord16 = I.zchckToWord16
744 val fWord32 = I.zchckToWord32
745 val fWord64 = I.zchckToWord64)
746 in
747 val zchckToLargeWord = S.f
748 end
749 local
750 structure S =
751 LargeWord_ChooseWordN
752 (type 'a t = 'a -> num
753 val fWord8 = I.schckFromWord8
754 val fWord16 = I.schckFromWord16
755 val fWord32 = I.schckFromWord32
756 val fWord64 = I.schckFromWord64)
757 in
758 val schckFromLargeWord = S.f
759 end
760 local
761 structure S =
762 LargeWord_ChooseWordN
763 (type 'a t = num -> 'a
764 val fWord8 = I.schckToWord8
765 val fWord16 = I.schckToWord16
766 val fWord32 = I.schckToWord32
767 val fWord64 = I.schckToWord64)
768 in
769 val schckToLargeWord = S.f
770 end
771
772
773 local
774 structure S =
775 SysWord_ChooseWordN
776 (type 'a t = 'a -> num
777 val fWord8 = I.zextdFromWord8
778 val fWord16 = I.zextdFromWord16
779 val fWord32 = I.zextdFromWord32
780 val fWord64 = I.zextdFromWord64)
781 in
782 val zextdFromSysWord = S.f
783 end
784 local
785 structure S =
786 SysWord_ChooseWordN
787 (type 'a t = num -> 'a
788 val fWord8 = I.zextdToWord8
789 val fWord16 = I.zextdToWord16
790 val fWord32 = I.zextdToWord32
791 val fWord64 = I.zextdToWord64)
792 in
793 val zextdToSysWord = S.f
794 end
795 local
796 structure S =
797 SysWord_ChooseWordN
798 (type 'a t = 'a -> num
799 val fWord8 = I.sextdFromWord8
800 val fWord16 = I.sextdFromWord16
801 val fWord32 = I.sextdFromWord32
802 val fWord64 = I.sextdFromWord64)
803 in
804 val sextdFromSysWord = S.f
805 end
806 local
807 structure S =
808 SysWord_ChooseWordN
809 (type 'a t = num -> 'a
810 val fWord8 = I.sextdToWord8
811 val fWord16 = I.sextdToWord16
812 val fWord32 = I.sextdToWord32
813 val fWord64 = I.sextdToWord64)
814 in
815 val sextdToSysWord = S.f
816 end
817 local
818 structure S =
819 SysWord_ChooseWordN
820 (type 'a t = 'a -> num
821 val fWord8 = I.castFromWord8
822 val fWord16 = I.castFromWord16
823 val fWord32 = I.castFromWord32
824 val fWord64 = I.castFromWord64)
825 in
826 val castFromSysWord = S.f
827 end
828 local
829 structure S =
830 SysWord_ChooseWordN
831 (type 'a t = num -> 'a
832 val fWord8 = I.castToWord8
833 val fWord16 = I.castToWord16
834 val fWord32 = I.castToWord32
835 val fWord64 = I.castToWord64)
836 in
837 val castToSysWord = S.f
838 end
839 local
840 structure S =
841 SysWord_ChooseWordN
842 (type 'a t = 'a -> num
843 val fWord8 = I.zchckFromWord8
844 val fWord16 = I.zchckFromWord16
845 val fWord32 = I.zchckFromWord32
846 val fWord64 = I.zchckFromWord64)
847 in
848 val zchckFromSysWord = S.f
849 end
850 local
851 structure S =
852 SysWord_ChooseWordN
853 (type 'a t = num -> 'a
854 val fWord8 = I.zchckToWord8
855 val fWord16 = I.zchckToWord16
856 val fWord32 = I.zchckToWord32
857 val fWord64 = I.zchckToWord64)
858 in
859 val zchckToSysWord = S.f
860 end
861 local
862 structure S =
863 SysWord_ChooseWordN
864 (type 'a t = 'a -> num
865 val fWord8 = I.schckFromWord8
866 val fWord16 = I.schckFromWord16
867 val fWord32 = I.schckFromWord32
868 val fWord64 = I.schckFromWord64)
869 in
870 val schckFromSysWord = S.f
871 end
872 local
873 structure S =
874 SysWord_ChooseWordN
875 (type 'a t = num -> 'a
876 val fWord8 = I.schckToWord8
877 val fWord16 = I.schckToWord16
878 val fWord32 = I.schckToWord32
879 val fWord64 = I.schckToWord64)
880 in
881 val schckToSysWord = S.f
882 end
883 end
884
885 structure Primitive =
886 struct
887 open Primitive
888
889 structure Int8 =
890 struct
891 open Int8
892 local
893 structure S = MkNum1(struct
894 open Int8
895 type num = int
896 end)
897 in
898 open S
899 end
900 end
901 structure Int16 =
902 struct
903 open Int16
904 local
905 structure S = MkNum1(struct
906 open Int16
907 type num = int
908 end)
909 in
910 open S
911 end
912 end
913 structure Int32 =
914 struct
915 open Int32
916 local
917 structure S = MkNum1(struct
918 open Int32
919 type num = int
920 end)
921 in
922 open S
923 end
924 end
925 structure Int64 =
926 struct
927 open Int64
928 local
929 structure S = MkNum1(struct
930 open Int64
931 type num = int
932 end)
933 in
934 open S
935 end
936 end
937 structure IntInf =
938 struct
939 open IntInf
940 local
941 structure S = MkNum1(struct
942 open IntInf
943 type num = int
944 end)
945 in
946 open S
947 end
948 end
949
950 structure Word8 =
951 struct
952 open Word8
953 local
954 structure S = MkNum1(struct
955 open Word8
956 type num = word
957 end)
958 in
959 open S
960 end
961 end
962 structure Word16 =
963 struct
964 open Word16
965 local
966 structure S = MkNum1(struct
967 open Word16
968 type num = word
969 end)
970 in
971 open S
972 end
973 end
974 structure Word32 =
975 struct
976 open Word32
977 local
978 structure S = MkNum1(struct
979 open Word32
980 type num = word
981 end)
982 in
983 open S
984 end
985 end
986 structure Word64 : PRIM_WORD =
987 struct
988 open Word64
989 local
990 structure S = MkNum1(struct
991 open Word64
992 type num = word
993 end)
994 in
995 open S
996 end
997 end
998
999 end