-ptdef (Newtype tcon tbinds rep ) =
- text "%newtype" <+> pqname tcon <+> (hsep (map ptbind tbinds)) <+> repclause
- where repclause = case rep of
- Just ty -> char '=' <+> pty ty
- Nothing -> empty
-
+ptdef (Newtype tcon tbinds (coercion,k) rep) =
+-- Here we take apart the newtype tycon in order to get the newtype coercion,
+-- which needs to be represented in the External Core file because it's not
+-- straightforward to derive its definition from the newtype declaration alone.
+-- At the same time, we need the newtype decl to declare the tycon itself.
+-- Sigh.
+ text "%newtype" <+> pqname tcon <+> (hsep (map ptbind tbinds))
+ $$ indent (axiomclause $$ repclause)
+ where axiomclause = char '^' <+> parens (pqname coercion <+> text "::"
+ <+> pkind k)
+ repclause = case rep of
+ Just ty -> char '=' <+> pty ty
+ Nothing -> empty
+
+
+pcdef :: Cdef -> Doc