Make dumpIfSet_dyn_or use dumpSDoc
[ghc-hetmet.git] / compiler / coreSyn / ExternalCore.lhs
index d3b6e3a..359419c 100644 (file)
@@ -4,21 +4,17 @@
 \begin{code}
 module ExternalCore where
 
-
 data Module 
  = Module Mname [Tdef] [Vdefg]
 
 data Tdef 
   = Data (Qual Tcon) [Tbind] [Cdef]
-  | Newtype (Qual Tcon) [Tbind] Axiom (Maybe Ty)
+  | Newtype (Qual Tcon) (Qual Tcon) [Tbind] Ty
 
 data Cdef 
   = Constr (Qual Dcon) [Tbind] [Ty]
   | GadtConstr (Qual Dcon) Ty
 
--- Newtype coercion
-type Axiom = (Qual Tcon, [Tbind], Kind)
-
 data Vdefg 
   = Rec [Vdef]
   | Nonrec Vdef
@@ -54,11 +50,21 @@ data Alt
 type Vbind = (Var,Ty)
 type Tbind = (Tvar,Kind)
 
+-- Internally, we represent types and coercions separately; but for
+-- the purposes of external core (at least for now) it's still
+-- convenient to collapse them into a single type.
 data Ty 
   = Tvar Tvar
   | Tcon (Qual Tcon)
   | Tapp Ty Ty
   | Tforall Tbind Ty 
+-- We distinguish primitive coercions because External Core treats
+-- them specially, so we have to print them out with special syntax.
+  | TransCoercion Ty Ty
+  | SymCoercion Ty
+  | UnsafeCoercion Ty Ty
+  | InstCoercion Ty Ty
+  | NthCoercion Int Ty
 
 data Kind 
   = Klifted