diff --git a/Text/Libyaml.hs b/Text/Libyaml.hs
--- a/Text/Libyaml.hs
+++ b/Text/Libyaml.hs
@@ -7,6 +7,7 @@
 {-# LANGUAGE PackageImports #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE RankNTypes #-}
+{-# LANGUAGE CPP #-}
 
 module Text.Libyaml
     ( -- * The event stream
@@ -22,6 +23,11 @@
     , YamlDecoder
     , parseEvent
     , emitEvent
+      -- ** Combinators
+    , emitStream
+    , emitDocument
+    , emitSequence
+    , emitMapping
       -- * Higher level functions
     , encode
     , decode
@@ -38,7 +44,11 @@
 import Foreign.Ptr
 import Foreign.ForeignPtr
 import Foreign.Marshal.Alloc
+#if TRANSFORMERS_02
+import "transformers" Control.Monad.IO.Class
+#else
 import "transformers" Control.Monad.Trans
+#endif
 import Control.Monad.Failure.Transformers
 import qualified Control.Monad.Trans.Error as ErrorT
 import Control.Monad.Trans.Reader
@@ -416,6 +426,18 @@
     when (res == 0) $ do
         problem <- liftIO $ makeString c_get_emitter_error emitter
         failure $ YamlEmitterException e problem
+
+emitStream, emitDocument, emitSequence, emitMapping
+    :: (MonadIO m, MonadFailure YamlException m)
+    => YamlEncoder m ()
+    -> YamlEncoder m ()
+emitStream e = emitEvent EventStreamStart >> e >> emitEvent EventStreamEnd
+emitDocument e = emitEvent EventDocumentStart >> e
+              >> emitEvent EventDocumentEnd
+emitSequence e = emitEvent EventSequenceStart >> e
+              >> emitEvent EventSequenceEnd
+emitMapping e = emitEvent EventMappingStart >> e
+             >> emitEvent EventMappingEnd
 
 parseEvent :: (With m, MonadFailure YamlException m)
            => YamlDecoder m Event
diff --git a/yaml.cabal b/yaml.cabal
--- a/yaml.cabal
+++ b/yaml.cabal
@@ -1,5 +1,5 @@
 name:            yaml
-version:         0.2.0
+version:         0.2.1
 license:         BSD3
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
@@ -15,6 +15,8 @@
                     c/yaml_private.h,
                     c/yaml.h
 
+flag transformers_02
+    description: transformers = 0.2.*
 flag buildtests
   description: Build the executable to run unit tests
   default: False
@@ -28,11 +30,15 @@
     else
         Buildable: True
     build-depends:   base >= 4 && < 5,
-                     transformers >= 0.1 && < 0.2,
                      control-monad-failure >= 0.6.0 && < 0.7,
                      bytestring >= 0.9.1.4 && < 0.10
     exposed-modules: Text.Libyaml
-    ghc-options:     -Wall -auto-all -caf-all
+    if flag(transformers_02)
+      build-depends: transformers >= 0.2 && < 0.3
+      CPP-OPTIONS: -DTRANSFORMERS_02
+    else
+      build-depends: transformers >= 0.1 && < 0.2
+    ghc-options:     -Wall
     c-sources:       c/helper.c,
                      c/api.c,
                      c/dumper.c,
@@ -49,14 +55,17 @@
         Buildable: True
         cpp-options:     -DTEST
         build-depends:   test-framework,
-                         test-framework-quickcheck,
+                         test-framework-quickcheck2,
                          test-framework-hunit,
                          HUnit,
-                         QuickCheck >= 1 && < 2,
+                         QuickCheck >= 2 && < 3,
                          base >= 4 && < 5,
-                         transformers >= 0.1 && < 0.2,
-                         control-monad-failure >= 0.6.0 && < 0.7,
                          bytestring >= 0.9.1.4 && < 0.10
+        if flag(transformers_02)
+          build-depends: transformers >= 0.2 && < 0.3
+          CPP-OPTIONS: -DTRANSFORMERS_02
+        else
+          build-depends: transformers >= 0.1 && < 0.2
     else
         Buildable: False
     ghc-options:     -Wall
