[project @ 1998-12-18 17:40:31 by simonpj]
[ghc-hetmet.git] / ghc / compiler / prelude / PrelMods.lhs
1 %
2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
3 %
4 \section[PrelMods]{Definitions of prelude modules}
5
6 The strings identify built-in prelude modules.  They are
7 defined here so as to avod 
8
9 [oh dear, looks like the recursive module monster caught up with
10  and gobbled whoever was writing the above :-) -- SOF ]
11
12 \begin{code}
13 module PrelMods
14         (
15         mkTupNameStr, mkUbxTupNameStr,
16
17         pREL_GHC, pRELUDE, mONAD, rATIO, iX, mAIN, pREL_MAIN, pREL_ERR,
18         pREL_BASE, pREL_NUM, pREL_LIST, pREL_TUP, pREL_ADDR, pREL_READ,
19         pREL_PACK, pREL_CONC, pREL_IO_BASE, pREL_ST, pREL_ARR, pREL_FOREIGN,
20
21         iNT, wORD
22         ) where
23
24 #include "HsVersions.h"
25
26 import OccName  ( Module, mkModule )
27 import Util     ( nOfThem )
28 import Panic    ( panic )
29 \end{code}
30
31 \begin{code}
32 pREL_GHC, pRELUDE, mONAD, rATIO, iX, mAIN, pREL_MAIN, pREL_ERR      :: Module
33 pREL_BASE, pREL_NUM, pREL_LIST, pREL_TUP, pREL_ADDR, pREL_READ      :: Module   
34 pREL_PACK, pREL_CONC, pREL_IO_BASE, pREL_ST, pREL_ARR, pREL_FOREIGN :: Module   
35
36
37 pRELUDE      = mkModule "Prelude"
38 pREL_GHC     = mkModule "PrelGHC"          -- Primitive types and values
39 pREL_BASE    = mkModule "PrelBase"
40 pREL_READ    = mkModule "PrelRead"
41 pREL_NUM     = mkModule "PrelNum"
42 pREL_LIST    = mkModule "PrelList"
43 pREL_TUP     = mkModule "PrelTup"
44 pREL_PACK    = mkModule "PrelPack"
45 pREL_CONC    = mkModule "PrelConc"
46 pREL_IO_BASE = mkModule "PrelIOBase"
47 pREL_ST      = mkModule "PrelST"
48 pREL_ARR     = mkModule "PrelArr"
49 pREL_FOREIGN = mkModule "PrelForeign"
50 pREL_ADDR    = mkModule "PrelAddr"
51 pREL_ERR     = mkModule "PrelErr"
52
53 mONAD        = mkModule "Monad"
54 rATIO        = mkModule "Ratio"
55 iX           = mkModule "Ix"
56
57 pREL_MAIN    = mkModule "PrelMain"
58 mAIN         = mkModule "Main"
59
60 iNT, wORD   :: Module
61
62 iNT          = mkModule "Int"
63 wORD         = mkModule "Word"
64
65 \end{code}
66
67 %************************************************************************
68 %*                                                                      *
69 \subsection{Constructing the names of tuples
70 %*                                                                      *
71 %************************************************************************
72
73 \begin{code}
74 mkTupNameStr, mkUbxTupNameStr :: Int -> (Module, FAST_STRING)
75
76 mkTupNameStr 0 = (pREL_BASE, SLIT("()"))
77 mkTupNameStr 1 = panic "Name.mkTupNameStr: 1 ???"
78 mkTupNameStr 2 = (pREL_TUP, _PK_ "(,)")   -- not strictly necessary
79 mkTupNameStr 3 = (pREL_TUP, _PK_ "(,,)")  -- ditto
80 mkTupNameStr 4 = (pREL_TUP, _PK_ "(,,,)") -- ditto
81 mkTupNameStr n = (pREL_TUP, _PK_ ("(" ++ nOfThem (n-1) ',' ++ ")"))
82
83 mkUbxTupNameStr 0 = panic "Name.mkUbxTupNameStr: 0 ???"
84 mkUbxTupNameStr 1 = (pREL_GHC, _PK_ "(# #)") -- 1 and 0 both make sense!!!
85 mkUbxTupNameStr 2 = (pREL_GHC, _PK_ "(#,#)")
86 mkUbxTupNameStr 3 = (pREL_GHC, _PK_ "(#,,#)")
87 mkUbxTupNameStr 4 = (pREL_GHC, _PK_ "(#,,,#)")
88 mkUbxTupNameStr n = (pREL_GHC, _PK_ ("(#" ++ nOfThem (n-1) ',' ++ "#)"))
89 \end{code}
90
91