diff --git a/Language/C/Parser/Parser.y b/Language/C/Parser/Parser.y
--- a/Language/C/Parser/Parser.y
+++ b/Language/C/Parser/Parser.y
@@ -259,9 +259,11 @@
 
 %name parseType       type_declaration
 %name parseParam      parameter_declaration
+%name parseParams     parameter_list
 %name parseInit       initializer
 
 %name parseStm        statement
+%name parseStms       statement_list
 %name parseBlockItem  block_item
 
 %name parseUnit       translation_unit
@@ -422,7 +424,7 @@
             ; return $ BlockLit (BlockVoid (srclocOf $1)) $2 items ($1 `srcspan` $3)
             }
       }
-  | '^' '(' parameter_list ')'                       attributes_opt compound_statement
+  | '^' '(' parameter_list_ ')'                       attributes_opt compound_statement
       {% do { assertObjCEnabled ($1 <--> $6) "To use blocks, enable Objective-C support"
             ; let Block items _ = $6
             ; return $ BlockLit (BlockParam (rev $3) ($2 `srcspan` $4)) $5 items ($1 `srcspan` $6)
@@ -1536,26 +1538,30 @@
 
 parameter_type_list :: { Params }
 parameter_type_list :
-    parameter_list
+    parameter_list_
       { let params = rev $1
         in
           Params params False (srclocOf params)
       }
-  | parameter_list ',' '...'
+  | parameter_list_ ',' '...'
       { let params = rev $1
         in
           Params params True (params `srcspan` $3)
       }
 
-parameter_list :: { RevList Param }
-parameter_list:
+parameter_list :: { [Param] }
+parameter_list :
+    parameter_list_ { rev $1 }
+
+parameter_list_ :: { RevList Param }
+parameter_list_ :
     parameter_declaration
       { rsingleton $1 }
   | ANTI_PARAMS
       { rsingleton (AntiParams (getANTI_PARAMS $1) (srclocOf $1)) }
-  | parameter_list ',' parameter_declaration
+  | parameter_list_ ',' parameter_declaration
       { rcons $3 $1 }
-  | parameter_list ',' ANTI_PARAMS
+  | parameter_list_ ',' ANTI_PARAMS
       { rcons (AntiParams (getANTI_PARAMS $3) (srclocOf $3))  $1 }
 
 parameter_declaration :: { Param }
@@ -1778,6 +1784,17 @@
   | objc_at_statement    { $1 }
   | ANTI_PRAGMA          { AntiPragma (getANTI_PRAGMA $1) (srclocOf $1) }
   | ANTI_STM             { AntiStm (getANTI_STM $1) (srclocOf $1) }
+
+statement_list :: { [Stm] }
+statement_list :
+    statement_list_ { rev $1 }
+
+statement_list_ :: { RevList Stm }
+statement_list_ :
+     statement                 { rsingleton $1 }
+  |  ANTI_STMS                 { rsingleton (AntiStms (getANTI_STMS $1) (srclocOf $1)) }
+  |  statement_list_ statement { rcons $2 $1 }
+  |  statement_list_ ANTI_STMS { rcons (AntiStms (getANTI_STMS $2) (srclocOf $2)) $1 }
 
 labeled_statement :: { Stm }
 labeled_statement :
diff --git a/Language/C/Quote.hs b/Language/C/Quote.hs
--- a/Language/C/Quote.hs
+++ b/Language/C/Quote.hs
@@ -39,6 +39,8 @@
 --
 -- [@cstm@] Statement, of type @'Stm'@.
 --
+-- [@cstms@] A list of statements, of type @['Stm']@.
+--
 -- [@citem@] Block item, of type @'BlockItem'@. A block item is either a
 -- declaration or a statement.
 --
@@ -47,6 +49,8 @@
 -- [@cinit@] Initializer, of type @'Initializer'@.
 --
 -- [@cparam@] Declaration of a function parameter, of type @'Param'@.
+--
+-- [@cparams@] Declaration of function parameters, of type @'[Param]'@.
 --
 -- [@csdecl@] Declaration of a struct member, of type @'FieldGroup'@.
 --
diff --git a/Language/C/Quote/C.hs b/Language/C/Quote/C.hs
--- a/Language/C/Quote/C.hs
+++ b/Language/C/Quote/C.hs
@@ -7,6 +7,8 @@
 -- Maintainer  :  mainland@cs.drexel.edu
 
 module Language.C.Quote.C (
+    ToIdent(..),
+    ToConst(..),
     ToExp(..),
     cexp,
     cedecl,
@@ -15,8 +17,10 @@
     cenum,
     cty,
     cparam,
+    cparams,
     cinit,
     cstm,
+    cstms,
     citem,
     cunit,
     cfun
@@ -24,7 +28,7 @@
 
 import qualified Language.C.Parser as P
 import qualified Language.C.Syntax as C
-import Language.C.Quote.Base (ToExp(..), quasiquote)
+import Language.C.Quote.Base (ToIdent(..), ToConst(..), ToExp(..), quasiquote)
 import Language.Haskell.TH.Quote (QuasiQuoter)
 
 exts :: [C.Extensions]
@@ -33,17 +37,19 @@
 typenames :: [String]
 typenames = []
 
-cdecl, cedecl, cenum, cexp, cfun, cinit, cparam, csdecl, cstm :: QuasiQuoter
+cdecl, cedecl, cenum, cexp, cfun, cinit, cparam, cparams, csdecl, cstm, cstms :: QuasiQuoter
 citem, cty, cunit :: QuasiQuoter
-cdecl  = quasiquote exts typenames P.parseDecl
-cedecl = quasiquote exts typenames P.parseEdecl
-cenum  = quasiquote exts typenames P.parseEnum
-cexp   = quasiquote exts typenames P.parseExp
-cfun   = quasiquote exts typenames P.parseFunc
-cinit  = quasiquote exts typenames P.parseInit
-cparam = quasiquote exts typenames P.parseParam
-csdecl = quasiquote exts typenames P.parseStructDecl
-cstm   = quasiquote exts typenames P.parseStm
-citem  = quasiquote exts typenames P.parseBlockItem
-cty    = quasiquote exts typenames P.parseType
-cunit  = quasiquote exts typenames P.parseUnit
+cdecl   = quasiquote exts typenames P.parseDecl
+cedecl  = quasiquote exts typenames P.parseEdecl
+cenum   = quasiquote exts typenames P.parseEnum
+cexp    = quasiquote exts typenames P.parseExp
+cfun    = quasiquote exts typenames P.parseFunc
+cinit   = quasiquote exts typenames P.parseInit
+cparam  = quasiquote exts typenames P.parseParam
+cparams = quasiquote exts typenames P.parseParams
+csdecl  = quasiquote exts typenames P.parseStructDecl
+cstm    = quasiquote exts typenames P.parseStm
+cstms   = quasiquote exts typenames P.parseStms
+citem   = quasiquote exts typenames P.parseBlockItem
+cty     = quasiquote exts typenames P.parseType
+cunit   = quasiquote exts typenames P.parseUnit
diff --git a/Language/C/Quote/CUDA.hs b/Language/C/Quote/CUDA.hs
--- a/Language/C/Quote/CUDA.hs
+++ b/Language/C/Quote/CUDA.hs
@@ -7,6 +7,8 @@
 -- Maintainer  :  mainland@cs.drexel.edu
 
 module Language.C.Quote.CUDA (
+    ToIdent(..),
+    ToConst(..),
     ToExp(..),
     cexp,
     cedecl,
@@ -15,8 +17,10 @@
     cenum,
     cty,
     cparam,
+    cparams,
     cinit,
     cstm,
+    cstms,
     citem,
     cunit,
     cfun
@@ -24,7 +28,7 @@
 
 import qualified Language.C.Parser as P
 import qualified Language.C.Syntax as C
-import Language.C.Quote.Base (ToExp(..), quasiquote)
+import Language.C.Quote.Base (ToIdent(..), ToConst(..), ToExp(..), quasiquote)
 import Language.Haskell.TH.Quote (QuasiQuoter)
 
 exts :: [C.Extensions]
@@ -41,17 +45,19 @@
 typeN :: Int -> String -> [String]
 typeN k typename = [typename ++ show n | n <- [1..k]]
 
-cdecl, cedecl, cenum, cexp, cfun, cinit, cparam, csdecl, cstm :: QuasiQuoter
+cdecl, cedecl, cenum, cexp, cfun, cinit, cparam, cparams, csdecl, cstm, cstms :: QuasiQuoter
 citem, cty, cunit :: QuasiQuoter
-cdecl  = quasiquote exts typenames P.parseDecl
-cedecl = quasiquote exts typenames P.parseEdecl
-cenum  = quasiquote exts typenames P.parseEnum
-cexp   = quasiquote exts typenames P.parseExp
-cfun   = quasiquote exts typenames P.parseFunc
-cinit  = quasiquote exts typenames P.parseInit
-cparam = quasiquote exts typenames P.parseParam
-csdecl = quasiquote exts typenames P.parseStructDecl
-cstm   = quasiquote exts typenames P.parseStm
-citem  = quasiquote exts typenames P.parseBlockItem
-cty    = quasiquote exts typenames P.parseType
-cunit  = quasiquote exts typenames P.parseUnit
+cdecl   = quasiquote exts typenames P.parseDecl
+cedecl  = quasiquote exts typenames P.parseEdecl
+cenum   = quasiquote exts typenames P.parseEnum
+cexp    = quasiquote exts typenames P.parseExp
+cfun    = quasiquote exts typenames P.parseFunc
+cinit   = quasiquote exts typenames P.parseInit
+cparam  = quasiquote exts typenames P.parseParam
+cparams = quasiquote exts typenames P.parseParams
+csdecl  = quasiquote exts typenames P.parseStructDecl
+cstm    = quasiquote exts typenames P.parseStm
+cstms   = quasiquote exts typenames P.parseStms
+citem   = quasiquote exts typenames P.parseBlockItem
+cty     = quasiquote exts typenames P.parseType
+cunit   = quasiquote exts typenames P.parseUnit
diff --git a/Language/C/Quote/GCC.hs b/Language/C/Quote/GCC.hs
--- a/Language/C/Quote/GCC.hs
+++ b/Language/C/Quote/GCC.hs
@@ -7,6 +7,8 @@
 -- Maintainer  :  mainland@cs.drexel.edu
 
 module Language.C.Quote.GCC (
+    ToIdent(..),
+    ToConst(..),
     ToExp(..),
     cexp,
     cedecl,
@@ -15,8 +17,10 @@
     cenum,
     cty,
     cparam,
+    cparams,
     cinit,
     cstm,
+    cstms,
     citem,
     cunit,
     cfun
@@ -24,7 +28,7 @@
 
 import qualified Language.C.Parser as P
 import qualified Language.C.Syntax as C
-import Language.C.Quote.Base (ToExp(..), quasiquote)
+import Language.C.Quote.Base (ToIdent(..), ToConst(..), ToExp(..), quasiquote)
 import Language.Haskell.TH.Quote (QuasiQuoter)
 
 exts :: [C.Extensions]
@@ -33,17 +37,19 @@
 typenames :: [String]
 typenames = []
 
-cdecl, cedecl, cenum, cexp, cfun, cinit, cparam, csdecl, cstm :: QuasiQuoter
+cdecl, cedecl, cenum, cexp, cfun, cinit, cparam, cparams, csdecl, cstm, cstms :: QuasiQuoter
 citem, cty, cunit :: QuasiQuoter
-cdecl  = quasiquote exts typenames P.parseDecl
-cedecl = quasiquote exts typenames P.parseEdecl
-cenum  = quasiquote exts typenames P.parseEnum
-cexp   = quasiquote exts typenames P.parseExp
-cfun   = quasiquote exts typenames P.parseFunc
-cinit  = quasiquote exts typenames P.parseInit
-cparam = quasiquote exts typenames P.parseParam
-csdecl = quasiquote exts typenames P.parseStructDecl
-cstm   = quasiquote exts typenames P.parseStm
-citem  = quasiquote exts typenames P.parseBlockItem
-cty    = quasiquote exts typenames P.parseType
-cunit  = quasiquote exts typenames P.parseUnit
+cdecl   = quasiquote exts typenames P.parseDecl
+cedecl  = quasiquote exts typenames P.parseEdecl
+cenum   = quasiquote exts typenames P.parseEnum
+cexp    = quasiquote exts typenames P.parseExp
+cfun    = quasiquote exts typenames P.parseFunc
+cinit   = quasiquote exts typenames P.parseInit
+cparam  = quasiquote exts typenames P.parseParam
+cparams = quasiquote exts typenames P.parseParams
+csdecl  = quasiquote exts typenames P.parseStructDecl
+cstm    = quasiquote exts typenames P.parseStm
+cstms   = quasiquote exts typenames P.parseStms
+citem   = quasiquote exts typenames P.parseBlockItem
+cty     = quasiquote exts typenames P.parseType
+cunit   = quasiquote exts typenames P.parseUnit
diff --git a/Language/C/Quote/ObjC.hs b/Language/C/Quote/ObjC.hs
--- a/Language/C/Quote/ObjC.hs
+++ b/Language/C/Quote/ObjC.hs
@@ -8,6 +8,8 @@
 -- Maintainer  :  mainland@cs.drexel.edu
 
 module Language.C.Quote.ObjC (
+    ToIdent(..),
+    ToConst(..),
     ToExp(..),
     cexp,
     cedecl,
@@ -16,8 +18,10 @@
     cenum,
     cty,
     cparam,
+    cparams,
     cinit,
     cstm,
+    cstms,
     citem,
     cunit,
     cfun
@@ -25,7 +29,7 @@
 
 import qualified Language.C.Parser as P
 import qualified Language.C.Syntax as C
-import Language.C.Quote.Base (ToExp(..), quasiquote)
+import Language.C.Quote.Base (ToIdent(..), ToConst(..), ToExp(..), quasiquote)
 import Language.Haskell.TH.Quote (QuasiQuoter)
 
 exts :: [C.Extensions]
@@ -34,17 +38,19 @@
 typenames :: [String]
 typenames = ["id"]
 
-cdecl, cedecl, cenum, cexp, cfun, cinit, cparam, csdecl, cstm :: QuasiQuoter
+cdecl, cedecl, cenum, cexp, cfun, cinit, cparam, cparams, csdecl, cstm, cstms :: QuasiQuoter
 citem, cty, cunit :: QuasiQuoter
-cdecl  = quasiquote exts typenames P.parseDecl
-cedecl = quasiquote exts typenames P.parseEdecl
-cenum  = quasiquote exts typenames P.parseEnum
-cexp   = quasiquote exts typenames P.parseExp
-cfun   = quasiquote exts typenames P.parseFunc
-cinit  = quasiquote exts typenames P.parseInit
-cparam = quasiquote exts typenames P.parseParam
-csdecl = quasiquote exts typenames P.parseStructDecl
-cstm   = quasiquote exts typenames P.parseStm
-citem  = quasiquote exts typenames P.parseBlockItem
-cty    = quasiquote exts typenames P.parseType
-cunit  = quasiquote exts typenames P.parseUnit
+cdecl   = quasiquote exts typenames P.parseDecl
+cedecl  = quasiquote exts typenames P.parseEdecl
+cenum   = quasiquote exts typenames P.parseEnum
+cexp    = quasiquote exts typenames P.parseExp
+cfun    = quasiquote exts typenames P.parseFunc
+cinit   = quasiquote exts typenames P.parseInit
+cparam  = quasiquote exts typenames P.parseParam
+cparams = quasiquote exts typenames P.parseParams
+csdecl  = quasiquote exts typenames P.parseStructDecl
+cstm    = quasiquote exts typenames P.parseStm
+cstms   = quasiquote exts typenames P.parseStms
+citem   = quasiquote exts typenames P.parseBlockItem
+cty     = quasiquote exts typenames P.parseType
+cunit   = quasiquote exts typenames P.parseUnit
diff --git a/Language/C/Quote/OpenCL.hs b/Language/C/Quote/OpenCL.hs
--- a/Language/C/Quote/OpenCL.hs
+++ b/Language/C/Quote/OpenCL.hs
@@ -6,6 +6,8 @@
 -- Maintainer  :  mainland@cs.drexel.edu
 
 module Language.C.Quote.OpenCL (
+    ToIdent(..),
+    ToConst(..),
     ToExp(..),
     cexp,
     cedecl,
@@ -14,8 +16,10 @@
     cenum,
     cty,
     cparam,
+    cparams,
     cinit,
     cstm,
+    cstms,
     citem,
     cunit,
     cfun
@@ -23,7 +27,7 @@
 
 import qualified Language.C.Parser as P
 import qualified Language.C.Syntax as C
-import Language.C.Quote.Base (ToExp(..), quasiquote)
+import Language.C.Quote.Base (ToIdent(..), ToConst(..), ToExp(..), quasiquote)
 import Language.Haskell.TH.Quote (QuasiQuoter)
 
 exts :: [C.Extensions]
@@ -45,17 +49,19 @@
 typeN :: String -> [String]
 typeN typename = [typename ++ show n | n <- [2, 3, 4, 8, 16 :: Integer]]
 
-cdecl, cedecl, cenum, cexp, cfun, cinit, cparam, csdecl, cstm :: QuasiQuoter
+cdecl, cedecl, cenum, cexp, cfun, cinit, cparam, cparams, csdecl, cstm, cstms :: QuasiQuoter
 citem, cty, cunit :: QuasiQuoter
-cdecl  = quasiquote exts typenames P.parseDecl
-cedecl = quasiquote exts typenames P.parseEdecl
-cenum  = quasiquote exts typenames P.parseEnum
-cexp   = quasiquote exts typenames P.parseExp
-cfun   = quasiquote exts typenames P.parseFunc
-cinit  = quasiquote exts typenames P.parseInit
-cparam = quasiquote exts typenames P.parseParam
-csdecl = quasiquote exts typenames P.parseStructDecl
-cstm   = quasiquote exts typenames P.parseStm
-citem  = quasiquote exts typenames P.parseBlockItem
-cty    = quasiquote exts typenames P.parseType
-cunit  = quasiquote exts typenames P.parseUnit
+cdecl   = quasiquote exts typenames P.parseDecl
+cedecl  = quasiquote exts typenames P.parseEdecl
+cenum   = quasiquote exts typenames P.parseEnum
+cexp    = quasiquote exts typenames P.parseExp
+cfun    = quasiquote exts typenames P.parseFunc
+cinit   = quasiquote exts typenames P.parseInit
+cparam  = quasiquote exts typenames P.parseParam
+cparams = quasiquote exts typenames P.parseParams
+csdecl  = quasiquote exts typenames P.parseStructDecl
+cstm    = quasiquote exts typenames P.parseStm
+cstms   = quasiquote exts typenames P.parseStms
+citem   = quasiquote exts typenames P.parseBlockItem
+cty     = quasiquote exts typenames P.parseType
+cunit   = quasiquote exts typenames P.parseUnit
diff --git a/language-c-quote.cabal b/language-c-quote.cabal
--- a/language-c-quote.cabal
+++ b/language-c-quote.cabal
@@ -1,5 +1,5 @@
 name:          language-c-quote
-version:       0.7.5
+version:       0.7.6
 cabal-version: >= 1.10
 license:       BSD3
 license-file:  LICENSE
