diff --git a/authoring.cabal b/authoring.cabal
--- a/authoring.cabal
+++ b/authoring.cabal
@@ -2,9 +2,9 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                authoring
-version:             0.1.0.0
+version:             0.2.3
 synopsis:            A library for writing papers
-description:         This package is parser combinator library for writing papers.
+description:         This package is a combinator library for writing papers.
 homepage:            http://github.com/nushio3/authoring
 bug-reports:         http://github.com/nushio3/authoring/issues
 license:             BSD3
@@ -23,7 +23,9 @@
 library
   hs-source-dirs:    src/
   exposed-modules:     
+    Text.Authoring
     Text.Authoring.Bibliography
+    Text.Authoring.Class
     Text.Authoring.Combinator
     Text.Authoring.Combinator.Cite
     Text.Authoring.Combinator.Meta
@@ -37,6 +39,7 @@
       base ==4.*
     , citation-resolve >= 0.4.2
     , containers >= 0.5
+    , data-default
     , HaTeX >= 3.8
     , lens
     , mtl
diff --git a/src/Text/Authoring.hs b/src/Text/Authoring.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Authoring.hs
@@ -0,0 +1,14 @@
+module Text.Authoring (
+
+module Text.Authoring.Class,
+module Text.Authoring.Combinator,
+module Text.Authoring.Bibliography,
+module Text.Authoring.Label,
+  
+                      )
+where
+
+import Text.Authoring.Bibliography
+import Text.Authoring.Class
+import Text.Authoring.Combinator
+import Text.Authoring.Label
diff --git a/src/Text/Authoring/Bibliography.hs b/src/Text/Authoring/Bibliography.hs
--- a/src/Text/Authoring/Bibliography.hs
+++ b/src/Text/Authoring/Bibliography.hs
@@ -1,4 +1,4 @@
-module Text.Authoring.Bibliography where
+module Text.Authoring.Bibliography (bibliographyContent, withDatabaseFile) where
 
 import           Control.Lens (use)
 import           Control.Monad
@@ -6,7 +6,7 @@
 import           Control.Monad.IO.Class
 import qualified Data.Set as Set
 import qualified Data.Text as Text
-import           Text.CSL.Input.Identifier (toBibTeXItem, HasDatabase)
+import           Text.CSL.Input.Identifier (toBibTeXItem, HasDatabase, withDatabaseFile)
 
 import Text.Authoring.State
 
diff --git a/src/Text/Authoring/Class.hs b/src/Text/Authoring/Class.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Authoring/Class.hs
@@ -0,0 +1,29 @@
+{-# LANGUAGE ConstraintKinds #-}
+{-# LANGUAGE TemplateHaskell #-}
+
+module Text.Authoring.Class where
+
+import           Control.Lens
+import           Control.Monad.RWS
+import           Control.Monad.State
+import           Control.Monad.Writer
+import           Data.Default (def)
+import           Text.Authoring.Document
+import           Text.Authoring.State
+import           Text.LaTeX (LaTeX)
+import qualified Text.CSL.Input.Identifier.Internal as Citation
+
+-- | The all-in-one environ for writing paper.  
+type MonadAuthoring s w m = (MonadState s m, HasAuthorState s, Citation.HasDatabase s, MonadWriter w m, HasDocument w, MonadIO m)  
+
+-- | An example of monad transformer that can provide full (but IO) authoring environment.
+
+type AuthoringT = RWST () Document AuthorState 
+
+
+-- | Run an authoring monad, returns the triple (monad return value, final author state, generated latex)
+
+runAuthoringT :: Monad m => AuthoringT m a -> m (a, AuthorState, LaTeX)
+runAuthoringT prog = do 
+  (a,s,w) <- runRWST prog () def
+  return (a,s,w ^. latexSrc)
diff --git a/src/Text/Authoring/Combinator/Cite.hs b/src/Text/Authoring/Combinator/Cite.hs
--- a/src/Text/Authoring/Combinator/Cite.hs
+++ b/src/Text/Authoring/Combinator/Cite.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE ConstraintKinds #-}
 {-# LANGUAGE OverloadedStrings #-}
 
 module Text.Authoring.Combinator.Cite where
@@ -10,30 +11,27 @@
 import qualified Data.Text as Text
 import Text.CSL.Input.Identifier (resolve, HasDatabase)
 
-
+import Text.Authoring.Class
 import Text.Authoring.Combinator.Meta
 import Text.Authoring.Combinator.Writer
 import Text.Authoring.Document
 import Text.Authoring.State
 
 
-citet, citep :: (MonadState s m, HasAuthorState s, HasDatabase s, 
-          MonadWriter w m, HasDocument w, MonadIO m) => [String] -> m ()
+citet, citep :: MonadAuthoring s w m => [String] -> m ()
 
 citet = citationGen "citet"
 citep = citationGen "citep"
 
-citet1, citep1 :: (MonadState s m, HasAuthorState s, HasDatabase s, 
-          MonadWriter w m, HasDocument w, MonadIO m) => String -> m ()
+citet1, citep1 :: MonadAuthoring s w m => String -> m ()
 
 citet1 = citationGen "citet" . (:[]) -- + ---<===   I am a long man lying
 citep1 = citationGen "citep" . (:[]) -- + ---<===   We are long men lying
 
 -- | make a citation to a document(s).
-citationGen :: (MonadState s m, HasAuthorState s, HasDatabase s, 
-          MonadWriter w m, HasDocument w, MonadIO m) => Text.Text -> [String] -> m ()
+citationGen :: MonadAuthoring s w m => Text.Text -> [String] -> m ()
 citationGen cmdName  urls = do
   forM_ urls $ \url -> do
-    _ <- resolve url
+    resolve url
     citedUrlSet %= Set.insert url 
   command1 cmdName $ braces $ raw $ Text.intercalate "," $ map Text.pack urls
diff --git a/src/Text/Authoring/Combinator/Writer.hs b/src/Text/Authoring/Combinator/Writer.hs
--- a/src/Text/Authoring/Combinator/Writer.hs
+++ b/src/Text/Authoring/Combinator/Writer.hs
@@ -21,17 +21,28 @@
 -- | Scribe a LaTeX syntax into the target document.
 
 latex :: (MonadWriter t m, HasDocument t) => LaTeX -> m ()
-latex x = scribe latexSrc x
+latex = scribe latexSrc
 
 -- | Scribe a raw text (unescaped) into the target.
 
 raw :: (MonadWriter t m, HasDocument t) => Text -> m ()
-raw x = latex $ LTX.raw x
+raw = latex . LTX.raw 
 
+-- | Scribe a raw text (escaped) into the target.
 
--- | Shows objects of type 'a' using Show interface
---   Escapes LaTeX special characters.
+esc :: (MonadWriter t m, HasDocument t) => Text -> m ()
+esc = raw . LTX.protectText 
 
-esc :: (MonadWriter t m, HasDocument t, Show a) => a -> m ()
-esc x = raw $ LTX.protectText $ pack $ Prelude.show x
+-- | Shows objects of type 'a' using Show interface,
+--   without escaping LaTeX special characters.
+
+rawShow :: (MonadWriter t m, HasDocument t, Show a) => a -> m ()
+rawShow = raw . pack . Prelude.show 
+
+-- | Shows objects of type 'a' using Show interface,
+--   escaping LaTeX special characters.
+
+escShow :: (MonadWriter t m, HasDocument t, Show a) => a -> m ()
+escShow = esc . pack . Prelude.show 
+
 
diff --git a/src/Text/Authoring/State.hs b/src/Text/Authoring/State.hs
--- a/src/Text/Authoring/State.hs
+++ b/src/Text/Authoring/State.hs
@@ -1,9 +1,12 @@
+{-# LANGUAGE ConstraintKinds #-}
+{-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE TemplateHaskell #-}
 
 module Text.Authoring.State where
 
 import           Control.Lens
 import           Control.Lens.TH
+import           Data.Default
 import qualified Data.Map as Map
 import qualified Data.Set as Set
 import           Data.Text (Text)
@@ -22,3 +25,6 @@
 
 instance Citation.HasDatabase AuthorState where
   database = citationDB
+  
+instance Default AuthorState where
+  def = AuthorState def def def
