diff --git a/hoppy-generator.cabal b/hoppy-generator.cabal
--- a/hoppy-generator.cabal
+++ b/hoppy-generator.cabal
@@ -1,5 +1,5 @@
 name: hoppy-generator
-version: 0.3.1
+version: 0.3.2
 synopsis: C++ FFI generator - Code generator
 homepage: http://khumba.net/projects/hoppy
 license: AGPL-3
diff --git a/src/Foreign/Hoppy/Generator/Main.hs b/src/Foreign/Hoppy/Generator/Main.hs
--- a/src/Foreign/Hoppy/Generator/Main.hs
+++ b/src/Foreign/Hoppy/Generator/Main.hs
@@ -19,28 +19,21 @@
 
 -- | A driver for a command-line interface to a generator.
 --
--- A simple @Main.hs@ for a generator can be:
+-- A simple @Main.hs@ for a generator can simply be:
 --
--- > import Foreign.Hoppy.Generator.Main (run)
--- > import Foreign.Hoppy.Generator.Spec (ErrorMsg, Interface, interface, interfaceResult)
--- > import System.Environment (getArgs)
--- > import System.Exit (exitFailure)
--- > import System.IO (hPutStrLn, stderr)
--- >
--- > iface :: Either ErrorMsg Interface
--- > iface = interface ...
--- >
--- > main :: IO ()
--- > main = case interfaceResult of
--- >   Left errorMsg -> do
--- >     hPutStrLn stderr $ "Error initializing interface: " ++ errorMsg
--- >     exitFailure
--- >   Right iface -> do
--- >     args <- getArgs
--- >     _ <- run [iface] args
--- >     return ()
+-- @
+-- import "Foreign.Hoppy.Generator.Main" ('defaultMain')
+-- import "Foreign.Hoppy.Generator.Spec" ('ErrorMsg', 'Interface', 'interface')
+--
+-- interfaceResult :: Either 'ErrorMsg' 'Interface'
+-- interfaceResult = 'interface' ...
+--
+-- main :: IO ()
+-- main = 'defaultMain' interfaceResult
+-- @
 module Foreign.Hoppy.Generator.Main (
   Action (..),
+  defaultMain,
   run,
   ) where
 
@@ -59,6 +52,7 @@
 import qualified Foreign.Hoppy.Generator.Language.Haskell.Internal as Haskell
 import Foreign.Hoppy.Generator.Spec
 import System.Directory (createDirectoryIfMissing, doesDirectoryExist)
+import System.Environment (getArgs)
 import System.Exit (exitFailure, exitSuccess)
 import System.FilePath ((</>), takeDirectory)
 import System.IO (hPutStrLn, stderr)
@@ -109,6 +103,24 @@
   _ -> case Haskell.generate $ cacheInterface cache of
     l@(Left _) -> return (cache, l)
     r@(Right gen) -> return (cache { generatedHaskell = Just gen }, r)
+
+-- | This provides a simple @main@ function for a generator.  Define your @main@
+-- as:
+--
+-- @
+-- main = defaultMain $ 'interface' ...
+-- @
+--
+-- Refer to 'run' for how to use the command-line interface.
+defaultMain :: Either String Interface -> IO ()
+defaultMain interfaceResult = case interfaceResult of
+  Left errorMsg -> do
+    hPutStrLn stderr $ "Error initializing interface: " ++ errorMsg
+    exitFailure
+  Right iface -> do
+    args <- getArgs
+    _ <- run [iface] args
+    return ()
 
 -- | @run interfaces args@ runs the driver with the command-line arguments from
 -- @args@ against the listed interfaces, and returns the list of actions
diff --git a/src/Foreign/Hoppy/Generator/Spec/Base.hs b/src/Foreign/Hoppy/Generator/Spec/Base.hs
--- a/src/Foreign/Hoppy/Generator/Spec/Base.hs
+++ b/src/Foreign/Hoppy/Generator/Spec/Base.hs
@@ -1416,7 +1416,8 @@
 makeClass :: Identifier
           -> Maybe ExtName
           -- ^ An optional external name; will be automatically derived from the
-          -- identifier if absent.
+          -- identifier if absent by dropping leading namespaces, and taking the
+          -- last component (sans template arguments).
           -> [Class]  -- ^ Superclasses.
           -> [ClassEntity]
           -> Class
@@ -1563,7 +1564,7 @@
     -- add exports.
   , classHaskellConversionToCppFn :: Maybe (Haskell.Generator ())
     -- ^ Produces a Haskell expression that evaluates to a function that takes
-    -- an object of the type that 'classHaskellConversionType' generates, and
+    -- an value of the type that 'classHaskellConversionType' generates, and
     -- returns a non-const handle for a new C++ object in IO.  The generator
     -- must output code and may add imports, but must not add exports.
     --
@@ -1571,9 +1572,10 @@
     -- present.
   , classHaskellConversionFromCppFn :: Maybe (Haskell.Generator ())
     -- ^ Produces a Haskell expression that evaluates to a function that takes a
-    -- const handle for a C++ object, and returns an value of the type that
-    -- 'classHaskellConversionType' generates, in IO.  The generator must output
-    -- code and may add imports, but must not add exports.
+    -- const handle for a C++ object, and returns a value of the type that
+    -- 'classHaskellConversionType' generates, in IO.  It should not delete the
+    -- handle.  The generator must output code and may add imports, but must not
+    -- add exports.
     --
     -- If this field is present, then 'classHaskellConversionType' must also be
     -- present.
diff --git a/src/Foreign/Hoppy/Generator/Types.hs b/src/Foreign/Hoppy/Generator/Types.hs
--- a/src/Foreign/Hoppy/Generator/Types.hs
+++ b/src/Foreign/Hoppy/Generator/Types.hs
@@ -154,7 +154,8 @@
 -- | A handle for calling foreign code from C++.
 callbackT = Internal_TCallback
 
--- | An instance of a class.
+-- | An instance of a class.  When used in a parameter or return type and not
+-- wrapped in a 'ptrT' or 'refT', this is a by-value object.
 objT = Internal_TObj
 
 -- | A special case of 'objT' that is only allowed when passing objects from
