diff --git a/Data/Universe/Helpers.hs b/Data/Universe/Helpers.hs
--- a/Data/Universe/Helpers.hs
+++ b/Data/Universe/Helpers.hs
@@ -29,8 +29,12 @@
 -- not exponentially so.
 diagonal :: [[a]] -> [a]
 diagonal xss = go ([], xss) where
-	go (b, []  ) = interleave b
-	go (b, e:es) = [h | h:_ <- b] ++ go (e:[t | _:t <- b],es)
+	-- it is critical for some applications that we start producing answers
+	-- before inspecting es_
+	go (b, es_) = [h | h:_ <- b] ++ case es_ of
+		[]   -> interleave ts
+		e:es -> go (e:ts, es)
+		where ts = [t | _:t <- b]
 
 -- | Fair 2-way interleaving.
 (+++) :: [a] -> [a] -> [a]
diff --git a/universe-base.cabal b/universe-base.cabal
--- a/universe-base.cabal
+++ b/universe-base.cabal
@@ -1,5 +1,5 @@
 name:                universe-base
-version:             1.0
+version:             1.0.1
 synopsis:            A class for finite and recursively enumerable types and some helper functions for enumerating them
 homepage:            https://github.com/dmwit/universe
 license:             BSD3
@@ -16,7 +16,7 @@
 source-repository this
     type:            git
     location:        https://github.com/dmwit/universe
-    tag:             1.0
+    tag:             base-1.0.1
 
 library
   exposed-modules:     Data.Universe.Class, Data.Universe.Helpers
