diff --git a/src/Typed/Spreadsheet.hs b/src/Typed/Spreadsheet.hs
--- a/src/Typed/Spreadsheet.hs
+++ b/src/Typed/Spreadsheet.hs
@@ -92,6 +92,7 @@
     , textUI
     , cellUI
     , graphicalUI
+    , ui
 
     -- * Controls
     , checkBox
@@ -333,11 +334,15 @@
         let diagram' = diagram # reflectY # translate (r2 (w', h'))
         Diagrams.Backend.Gtk.renderToGtk drawWindow diagram'
 
--- | Shared logic for `textUI` and `graphicalUI`
-ui  :: (Gtk.HBox -> IO a)
-    -> (a -> b -> IO ())
+-- | Underlying function for building custom user interfaces
+ui  :: (Gtk.HBox -> IO resource)
+    -- ^ Acquire initial resource
+    -> (resource -> event -> IO ())
+    -- ^ Callback function to process each event
     -> Text
-    -> Updatable b
+    -- ^ Window title
+    -> Updatable event
+    -- ^ Event stream
     -> IO ()
 ui setup process title (Updatable k) = do
     _ <- Gtk.initGUI
diff --git a/typed-spreadsheet.cabal b/typed-spreadsheet.cabal
--- a/typed-spreadsheet.cabal
+++ b/typed-spreadsheet.cabal
@@ -1,5 +1,5 @@
 Name: typed-spreadsheet
-Version: 1.1.1
+Version: 1.1.2
 Cabal-Version: >=1.8.0.2
 Build-Type: Simple
 License: BSD3
