diff --git a/cartel.cabal b/cartel.cabal
--- a/cartel.cabal
+++ b/cartel.cabal
@@ -3,10 +3,10 @@
 -- http://www.github.com/massysett/cartel
 --
 -- Script name used to generate: genCabal.hs
--- Generated on: 2014-05-28 19:56:02.905259 EDT
--- Cartel library version: 0.1.0.0
+-- Generated on: 2014-05-28 20:46:01.203146 EDT
+-- Cartel library version: 0.6.0.0
 name: cartel
-version: 0.4.0.0
+version: 0.6.0.0
 cabal-version: >= 1.14
 build-type: Simple
 license: BSD3
diff --git a/genCabal.hs b/genCabal.hs
--- a/genCabal.hs
+++ b/genCabal.hs
@@ -49,7 +49,7 @@
 properties :: A.Properties
 properties = A.properties
   { A.prName = "cartel"
-  , A.prVersion = A.Version [0,4,0,0]
+  , A.prVersion = A.Version [0,6,0,0]
   , A.prCabalVersion = (1, 14)
   , A.prBuildType = A.Simple
   , A.prLicense = A.BSD3
diff --git a/lib/Cartel/Ast.hs b/lib/Cartel/Ast.hs
--- a/lib/Cartel/Ast.hs
+++ b/lib/Cartel/Ast.hs
@@ -186,6 +186,17 @@
 
   } deriving (Eq, Ord, Show)
 
+-- | Things that can be an item in a field in a Cabal file.
+
+class Field a where
+
+  -- | Takes a conditional block and wraps it in the field type.
+  conditional :: CondBlock a -> a
+
+  -- | Takes a build information field and wraps it in the field
+  -- type.
+  buildInfo :: BuildInfoField -> a
+
 -- | A field in the @Library@ section of the Cabal file.  A
 -- @Library@ section can have multiple fields.
 data LibraryField
@@ -203,6 +214,10 @@
   -- ^ The @Library@ section can contain build information.
   deriving (Eq, Ord, Show)
 
+instance Field LibraryField where
+  conditional = LibConditional
+  buildInfo = LibInfo
+
 -- | The entire @Library@ section.
 newtype Library = Library
   { libFields :: [LibraryField]
@@ -224,6 +239,10 @@
 
   deriving (Eq, Ord, Show)
 
+instance Field ExecutableField where
+  conditional = ExeConditional
+  buildInfo = ExeInfo
+
 -- | An entire @Executable@ section.
 data Executable = Executable
   { exeName :: String
@@ -256,6 +275,10 @@
   -- ^ A test suite can contain build information fields.
   deriving (Eq, Ord, Show)
 
+instance Field TestSuiteField where
+  conditional = TestConditional
+  buildInfo = TestInfo
+
 -- | An entire test suite section.
 data TestSuite = TestSuite
   { tsName :: String
@@ -274,6 +297,10 @@
   | BenchmarkInfo BuildInfoField
   -- ^ A benchmark can have build information fields.
   deriving (Eq, Ord, Show)
+
+instance Field BenchmarkField where
+  conditional = BenchmarkConditional
+  buildInfo = BenchmarkInfo
 
 data Benchmark = Benchmark
   { bmName :: String
