-mkVoid :: VM Repr
-mkVoid = do
- tycon <- builtin voidTyCon
- var <- builtin voidVar
- return $ VoidRepr {
- void_tycon = tycon
- , void_bottom = Var var
- }
-
-mkProduct :: [Type] -> VM Repr
-mkProduct tys
+voidRepr :: VM Repr
+voidRepr
+ = do
+ tycon <- builtin voidTyCon
+ var <- builtin voidVar
+ return $ VoidRepr {
+ void_tycon = tycon
+ , void_bottom = Var var
+ }
+
+unboxedProductRepr :: [Type] -> VM Repr
+unboxedProductRepr [] = voidRepr
+unboxedProductRepr [ty] = return $ IdRepr ty
+unboxedProductRepr tys = boxedProductRepr tys
+
+boxedProductRepr :: [Type] -> VM Repr
+boxedProductRepr tys