diff --git a/System/Console/CmdLib/Command.hs b/System/Console/CmdLib/Command.hs
--- a/System/Console/CmdLib/Command.hs
+++ b/System/Console/CmdLib/Command.hs
@@ -14,7 +14,7 @@
 import Control.Monad( when, forM_ )
 import Control.Exception ( evaluate, catch, SomeException )
 import System.IO( hPutStrLn, stderr )
-import System.Exit
+import System.Exit( exitWith, ExitCode(..) )
 import Prelude hiding ( catch )
 
 -- | How to process options for a command. See "optionStyle" for details.
diff --git a/System/Console/CmdLib/Flag.hs b/System/Console/CmdLib/Flag.hs
--- a/System/Console/CmdLib/Flag.hs
+++ b/System/Console/CmdLib/Flag.hs
@@ -27,8 +27,14 @@
                 deriving Eq
 
 class Attributes a where
+  -- | Implement (override) this function to provide attributes to values of the type @a@.
   attributes :: a -> AttributeMap Key
   attributes _ = EmptyMap
+  -- | Override @readFlags@ to add parsers for your custom types that you wish to use as
+  -- flag arguments. See also "readCommon". The usual way to achieve this would be:
+  -- >   readFlag _ = readCommon <+< platform
+  -- >       where platform "ARM" = ARM
+  -- >             platform "Win32" = Win32
   readFlag :: Data b => a -> String -> b
   readFlag _ = readCommon
 
@@ -222,7 +228,8 @@
           strlist = (:[])
           list w str = map w (splitOn "," str)
 
-(<+<) :: (Typeable a, Typeable b, Monad m) => m a -> m b -> m a
+-- | Chain generic parsers. See also "readFlag" and "readCommon".
+(<+<) :: (Typeable a, Typeable b) => (String -> a) -> (String -> b) -> (String -> a)
 (<+<) = extR
 infixl 8 <+<
 
diff --git a/System/Console/CmdLib/Record.hs b/System/Console/CmdLib/Record.hs
--- a/System/Console/CmdLib/Record.hs
+++ b/System/Console/CmdLib/Record.hs
@@ -5,18 +5,19 @@
 import System.Console.CmdLib.Command
 import System.Console.GetOpt
 import Data.Data
+import Data.Generics.Aliases( extR )
 import Data.IORef
 import Data.List( nub, elemIndex )
 import Control.Exception ( throw, evaluate )
 import Control.Monad ( when )
 import Control.Monad.State( evalState, get, put, State, execState )
 import Data.Maybe( fromMaybe, fromJust )
-import System.Exit
+import System.Exit( exitWith, ExitCode(..) )
 
 import System.Console.CmdLib.Flag
 
 append :: forall a. (Data a) => a -> a -> a
-append a = any <+< list
+append a = any `extR` list
   where any = const a
         list :: (Typeable b) => b -> [String]
         list = (++(fromJust $ cast a)) . fromJust . cast
diff --git a/cmdlib.cabal b/cmdlib.cabal
--- a/cmdlib.cabal
+++ b/cmdlib.cabal
@@ -1,5 +1,5 @@
 name:        cmdlib
-version:     0.3.5
+version:     0.3.6
 synopsis:    a library for command line parsing & online help
 
 description: A commandline parsing library, based on getopt. Comes with a
