diff --git a/purescript-bridge.cabal b/purescript-bridge.cabal
--- a/purescript-bridge.cabal
+++ b/purescript-bridge.cabal
@@ -10,7 +10,7 @@
 -- PVP summary:      +-+------- breaking API changes
 --                   | | +----- non-breaking API additions
 --                   | | | +--- code changes with no API change
-version:             0.10.0.0
+version:             0.10.1.0
 
 -- A short (one-line) description of the package.
 synopsis:            Generate PureScript data types from Haskell data types
diff --git a/src/Language/PureScript/Bridge/Printer.hs b/src/Language/PureScript/Bridge/Printer.hs
--- a/src/Language/PureScript/Bridge/Printer.hs
+++ b/src/Language/PureScript/Bridge/Printer.hs
@@ -82,13 +82,22 @@
     typeList = T.intercalate ", " (Set.toList (importTypes l))
 
 sumTypeToText :: SumType 'PureScript -> Text
-sumTypeToText st@(SumType t cs) = (T.unlines $
-    "data " <> typeInfoToText True t <> " ="
-  : "    " <> T.intercalate "\n  | " (map (constructorToText 4) cs)
-  : [ "\nderive instance generic" <> _typeName t <> " :: " <> genericConstrains <> genericInstance t ])
-  <> "\n" <> sep <> "\n" <> sumTypeToPrismsAndLenses st <> sep
+sumTypeToText st =
+  sumTypeToTypeDecls st
+    <> "\n"
+    <> sep
+    <> "\n"
+    <> sumTypeToPrismsAndLenses st
+    <> sep
   where
     sep = T.replicate 80 "-"
+
+sumTypeToTypeDecls :: SumType 'PureScript -> Text
+sumTypeToTypeDecls st@(SumType t cs) = T.unlines $
+    dataOrNewtype cs <> " " <> typeInfoToText True t <> " ="
+  : "    " <> T.intercalate "\n  | " (map (constructorToText 4) cs)
+  : [ "\nderive instance generic" <> _typeName t <> " :: " <> genericConstrains <> genericInstance t ]
+  where
     genericInstance = ("Generic " <>) . typeInfoToText False
     genericConstrains
         | stpLength == 0 = mempty
@@ -101,6 +110,11 @@
     bracketWrap x = "(" <> x <> ")"
     sumTypeParameters = filter isTypeParam . Set.toList $ getUsedTypes st
     isTypeParam typ = _typeName typ `elem` map _typeName (_typeParameters t)
+    dataOrNewtype [constr]
+      | either isSingletonList (const True) (_sigValues constr) = "newtype"
+    dataOrNewtype _   = "data"
+    isSingletonList [_] = True
+    isSingletonList _  = False
 
 sumTypeToPrismsAndLenses :: SumType 'PureScript -> Text
 sumTypeToPrismsAndLenses st = sumTypeToPrisms st <> sumTypeToLenses st
diff --git a/test/Spec.hs b/test/Spec.hs
--- a/test/Spec.hs
+++ b/test/Spec.hs
@@ -176,4 +176,34 @@
                           , ""
                           ]
       in (barLenses <> recTypeLenses) `shouldBe` txt
-
+    it "tests generation of newtypes for record data type" $
+      let recType = bridgeSumType (buildBridge defaultBridge) (mkSumType (Proxy :: Proxy (SingleRecord A B)))
+          recTypeText = sumTypeToTypeDecls recType
+          txt = T.unlines [ "newtype SingleRecord a b ="
+                          , "    SingleRecord {"
+                          , "      _a :: a"
+                          , "    , _b :: b"
+                          , "    , c :: String"
+                          , "    }"
+                          , ""
+                          , "derive instance genericSingleRecord :: (Generic a, Generic b) => Generic (SingleRecord a b)"
+                          ]
+      in recTypeText `shouldBe` txt
+    it "tests generation of newtypes for haskell newtype" $
+      let recType = bridgeSumType (buildBridge defaultBridge) (mkSumType (Proxy :: Proxy SomeNewtype))
+          recTypeText = sumTypeToTypeDecls recType
+          txt = T.unlines [ "newtype SomeNewtype ="
+                          , "    SomeNewtype Int"
+                          , ""
+                          , "derive instance genericSomeNewtype :: Generic SomeNewtype"
+                          ]
+      in recTypeText `shouldBe` txt
+    it "tests generation of newtypes for haskell data type with one argument" $
+      let recType = bridgeSumType (buildBridge defaultBridge) (mkSumType (Proxy :: Proxy SingleValueConstr))
+          recTypeText = sumTypeToTypeDecls recType
+          txt = T.unlines [ "newtype SingleValueConstr ="
+                          , "    SingleValueConstr Int"
+                          , ""
+                          , "derive instance genericSingleValueConstr :: Generic SingleValueConstr"
+                          ]
+      in recTypeText `shouldBe` txt
diff --git a/test/TestData.hs b/test/TestData.hs
--- a/test/TestData.hs
+++ b/test/TestData.hs
@@ -50,6 +50,12 @@
   , c  :: String
   } deriving(Generic, Typeable, Show)
 
+newtype SomeNewtype = SomeNewtype Int
+  deriving (Generic, Typeable, Show)
+
+data SingleValueConstr = SingleValueConstr Int
+  deriving (Generic, Typeable, Show)
+
 a :: HaskellType
 a = mkTypeInfo (Proxy :: Proxy (Either String Int))
 
