[project @ 2003-07-11 08:53:25 by simonpj]
[ghc-hetmet.git] / ghc / compiler / coreSyn / ExternalCore.lhs
1 %
2 % (c) The University of Glasgow 2001
3 %
4 \begin{code}
5
6 module ExternalCore where
7
8
9 data Module 
10  = Module Mname [Tdef] [Vdefg]
11
12 data Tdef 
13   = Data (Qual Tcon) [Tbind] [Cdef]
14   | Newtype (Qual Tcon) [Tbind] (Maybe Ty)
15
16 data Cdef 
17   = Constr (Qual Dcon) [Tbind] [Ty]
18
19 data Vdefg 
20   = Rec [Vdef]
21   | Nonrec Vdef
22
23 type Vdef = (Qual Var,Ty,Exp) 
24
25 data Exp 
26   = Var (Qual Var)
27   | Dcon (Qual Dcon)
28   | Lit Lit
29   | App Exp Exp
30   | Appt Exp Ty
31   | Lam Bind Exp          
32   | Let Vdefg Exp
33   | Case Exp Vbind [Alt] {- non-empty list -}
34   | Coerce Ty Exp 
35   | Note String Exp
36   | External String Ty
37
38 data Bind 
39   = Vb Vbind
40   | Tb Tbind
41
42 data Alt 
43   = Acon (Qual Dcon) [Tbind] [Vbind] Exp
44   | Alit Lit Exp
45   | Adefault Exp
46
47 type Vbind = (Var,Ty)
48 type Tbind = (Tvar,Kind)
49
50 data Ty 
51   = Tvar Tvar
52   | Tcon (Qual Tcon)
53   | Tapp Ty Ty
54   | Tforall Tbind Ty 
55
56 data Kind 
57   = Klifted
58   | Kunlifted
59   | Kopen
60   | Karrow Kind Kind
61
62 data Lit 
63   = Lint Integer Ty
64   | Lrational Rational Ty
65   | Lchar Char Ty
66   | Lstring String Ty
67   
68
69 type Mname = Id
70 type Var = Id
71 type Tvar = Id
72 type Tcon = Id
73 type Dcon = Id
74
75 type Qual t = (Mname,t)
76
77 type Id = String
78
79 primMname = "GHCziPrim"
80
81 tcArrow :: Qual Tcon
82 tcArrow = (primMname, "ZLzmzgZR")
83
84 \end{code}
85
86
87
88