diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+# 0.1.4
+* Fix tuples parsing
+
 # 0.1.3
 * Parsing of unit values and types
 
diff --git a/library/Record/Parser.hs b/library/Record/Parser.hs
--- a/library/Record/Parser.hs
+++ b/library/Record/Parser.hs
@@ -53,6 +53,15 @@
   skipSpace *> p <* skipSpace <* endOfInput
 
 -- |
+-- >>> run type' "(Int, Char)"
+-- Right (Type_App (Type_App (Type_Tuple 2) (Type_Con "Int")) (Type_Con "Char"))
+-- 
+-- >>> run type' "(,) Int Int"
+-- Right (Type_App (Type_App (Type_Tuple 2) (Type_Con "Int")) (Type_Con "Int"))
+-- 
+-- >>> run type' "(,)"
+-- Right (Type_Tuple 2)
+-- 
 -- >>> run type' "()"
 -- Right (Type_Tuple 0)
 type' :: Parser Type
@@ -72,13 +81,17 @@
         conType =
           fmap Type_Con $ upperCaseName
         tupleConType =
-          fmap Type_Tuple $ 
-            char '(' *> (length <$> many (skipSpace *> char ',')) <* skipSpace <* char ')'
+          Type_Tuple 0 <$ string "()" <|>
+          Type_Tuple . succ . length <$> (char '(' *> many (char ',') <* char ')')
         tupleType =
-          fmap (\l -> foldl Type_App (Type_Tuple (length l)) l) $
-            char '(' *> skipSpace *>
-            sepBy1 type' (skipSpace *> char ',' <* skipSpace)
-            <* skipSpace <* char ')'
+          do
+            char '('
+            skipSpace
+            h <- type' <* skipSpace <* char ',' <* skipSpace
+            t <- sepBy1 type' (skipSpace *> char ',' <* skipSpace)
+            skipSpace
+            char ')'
+            return $ foldl Type_App (Type_Tuple (1 + length t)) $ h : t
         listType =
           fmap (Type_App Type_List) $
             char '[' *> skipSpace *> type' <* skipSpace <* char ']'
@@ -178,6 +191,15 @@
 
 -- |
 -- 
+-- >>> run exp "(,)"
+-- Right (Exp_TupleCon 2)
+-- 
+-- >>> run exp "(1,2)"
+-- Right (Exp_App (Exp_App (Exp_TupleCon 2) (Exp_Lit (Lit_Integer 1))) (Exp_Lit (Lit_Integer 2)))
+-- 
+-- >>> run exp "(1)"
+-- Right (Exp_Lit (Lit_Integer 1))
+-- 
 -- >>> run exp "()"
 -- Right (Exp_TupleCon 0)
 exp :: Parser Exp
@@ -217,15 +239,19 @@
             con =
               Exp_Con <$> (upperCaseName <|> symbolicIdent)
             tupleCon =
-              Exp_TupleCon . length <$> 
-              (char '(' *> many (char ',') <* char ')')
+              Exp_TupleCon 0 <$ string "()" <|>
+              Exp_TupleCon . succ . length <$> (char '(' *> many (char ',') <* char ')')
             nil =
               Exp_Nil <$ string "[]"
             tuple =
-              fmap (\l -> foldl Exp_App (Exp_TupleCon (length l)) l) $
-                char '(' *> skipSpace *>
-                sepBy1 exp (skipSpace *> char ',' <* skipSpace)
-                <* skipSpace <* char ')'
+              do
+                char '('
+                skipSpace
+                h <- exp <* skipSpace <* char ',' <* skipSpace
+                t <- sepBy1 exp (skipSpace *> char ',' <* skipSpace)
+                skipSpace
+                char ')'
+                return $ foldl Exp_App (Exp_TupleCon (1 + length t)) $ h : t
             list =
               fmap Exp_List $
                 char '[' *> skipSpace *> 
diff --git a/record.cabal b/record.cabal
--- a/record.cabal
+++ b/record.cabal
@@ -1,7 +1,7 @@
 name:
   record
 version:
-  0.1.3
+  0.1.4
 synopsis:
   First class records implemented with quasi-quotation
 description:
