Support construction of empty tuples.
authorMatthijs Kooijman <m.kooijman@student.utwente.nl>
Thu, 19 Feb 2009 14:48:58 +0000 (15:48 +0100)
committerMatthijs Kooijman <m.kooijman@student.utwente.nl>
Thu, 19 Feb 2009 14:48:58 +0000 (15:48 +0100)
Flatten.hs

index 11738c70f5803509056662013ee711b6fec93c54..1eaa0fffa26cfe1b3d4ae7c41e6b80a9de7244c7 100644 (file)
@@ -157,13 +157,18 @@ flattenExpr binds var@(Var id) =
           Left sig_use -> return ([], sig_use)
           Right _ -> error "Higher order functions not supported."
     IdInfo.DataConWorkId datacon -> do
-      lit <- dataConToLiteral datacon
-      let ty = CoreUtils.exprType var
-      sig_id <- genSignalId SigInternal ty
-      -- Add a name hint to the signal
-      addNameHint (Name.getOccString id) sig_id
-      addDef (UncondDef (Right $ Literal lit) sig_id)
-      return ([], Single sig_id)
+      if DataCon.isTupleCon datacon && (null $ DataCon.dataConAllTyVars datacon)
+        then do
+          -- Empty tuple construction
+          return ([], Tuple [])
+        else do
+          lit <- dataConToLiteral datacon
+          let ty = CoreUtils.exprType var
+          sig_id <- genSignalId SigInternal ty
+          -- Add a name hint to the signal
+          addNameHint (Name.getOccString id) sig_id
+          addDef (UncondDef (Right $ Literal lit) sig_id)
+          return ([], Single sig_id)
     otherwise ->
       error $ "Ids other than local vars and dataconstructors not supported: " ++ (showSDoc $ ppr id)