diff --git a/app/concurrency-tests.hs b/app/concurrency-tests.hs
--- a/app/concurrency-tests.hs
+++ b/app/concurrency-tests.hs
@@ -21,7 +21,6 @@
 import Control.Lens
 import Control.Monad.Conc.Class as C
 import NumHask.Prelude hiding (STM)
-import System.Random
 import Test.DejaFu hiding (get)
 import Test.DejaFu.Types
 
diff --git a/box.cabal b/box.cabal
--- a/box.cabal
+++ b/box.cabal
@@ -1,6 +1,6 @@
 cabal-version:  2.4
 name:           box
-version:        0.6.0
+version:        0.6.1
 synopsis:       boxes
 description:    concurrent, effectful boxes
 category:       project
@@ -54,7 +54,8 @@
     exceptions >= 0.10,
     lens >= 4.19,
     mmorph >= 1.1,
-    numhask >= 0.6 && < 0.7,
+    numhask >= 0.7 && < 0.8,
+    numhask-space >= 0.7 && < 0.8,
     profunctors >= 5.5,
     text >= 1.2,
     time >= 1.9,
@@ -73,7 +74,7 @@
     dejafu >= 2.3,
     generic-lens >= 2.0,
     lens >= 4.19,
-    numhask >= 0.6 && < 0.7,
+    numhask >= 0.7 && < 0.8,
     random >= 1.1,
     text >= 1.2,
     transformers >= 0.5
@@ -108,7 +109,7 @@
     generic-lens >= 2.0,
     lens >= 4.19,
     mtl >= 2.2,
-    numhask >= 0.6 && < 0.7,
+    numhask >= 0.7 && < 0.8,
     optparse-generic >= 1.3.0 && < 1.4,
     text >= 1.2,
     transformers >= 0.5,
@@ -136,7 +137,7 @@
     base >=4.7 && <5,
     box,
     doctest >= 0.16,
-    numhask >= 0.6 && < 0.7,
+    numhask >= 0.7 && < 0.8,
   default-language: Haskell2010
   default-extensions:
     NegativeLiterals
diff --git a/src/Box/Box.hs b/src/Box/Box.hs
--- a/src/Box/Box.hs
+++ b/src/Box/Box.hs
@@ -114,7 +114,7 @@
     loss :: p Void b
 
 instance (Applicative m) => Divap (Box m) where
-  divap split merge (Box lc le) (Box rc re) = Box (divide split lc rc) (liftA2 (curry merge) le re)
+  divap split' merge (Box lc le) (Box rc re) = Box (divide split' lc rc) (liftA2 (curry merge) le re)
 
   conpur a = Box conquer (pure a)
 
diff --git a/src/Box/Time.hs b/src/Box/Time.hs
--- a/src/Box/Time.hs
+++ b/src/Box/Time.hs
@@ -24,31 +24,17 @@
 import Control.Monad.Conc.Class as C
 import Data.Time
 import NumHask.Prelude hiding (STM, atomically)
-import qualified Prelude as P
+import NumHask.Space.Time
 
 -- | sleep for x seconds
 sleep :: (MonadConc m) => Double -> m ()
-sleep x = C.threadDelay (fromIntegral (floor $ x * 1e6 :: Integer))
+sleep x = C.threadDelay (floor $ x * 1e6)
 
 -- | sleep until a certain time (in the future)
 sleepUntil :: UTCTime -> IO ()
 sleepUntil u = do
   t0 <- getCurrentTime
-  sleep (toDouble $ diffUTCTime u t0)
-
-toDouble :: NominalDiffTime -> Double
-toDouble t =
-  (/ 1000000000000.0) $
-    fromIntegral (P.floor $ t P.* 1000000000000 :: Integer)
-
-fromDouble :: Double -> NominalDiffTime
-fromDouble x =
-  let d0 = ModifiedJulianDay 0
-      days = floor (x / toDouble nominalDay)
-      secs = x - fromIntegral days * toDouble nominalDay
-      t0 = UTCTime d0 (picosecondsToDiffTime 0)
-      t1 = UTCTime (addDays days d0) (picosecondsToDiffTime $ floor (secs / 1.0e-12))
-   in diffUTCTime t1 t0
+  sleep (fromNominalDiffTime $ diffUTCTime u t0)
 
 -- | A value with a UTCTime annotation.
 data Stamped a
@@ -93,7 +79,7 @@
     Just (l0, _) -> do
       t0 <- getCurrentTime
       let ua = diffLocalTime (utcToLocalTime utc t0) l0
-      let delta u = addLocalTime ua $ addLocalTime (fromDouble ((toDouble $ diffLocalTime u l0) * speed)) l0
+      let delta u = addLocalTime ua $ addLocalTime (toNominalDiffTime ((fromNominalDiffTime $ diffLocalTime u l0) * speed)) l0
       pure (mapE (\((l, a)) -> pure (Just ((delta l), a))) e)
 
 -- | simulate a delay from a (Stamped a) Emitter relative to the first timestamp
diff --git a/stack.yaml b/stack.yaml
--- a/stack.yaml
+++ b/stack.yaml
@@ -1,8 +1,13 @@
-resolver: nightly-2020-06-25
+resolver: nightly-2020-11-19
 
 packages:
   - .
 
 extra-deps:
-  - numhask-0.6.0.2
+  - numhask-0.7.0.0
+  - protolude-0.3.0
+  - random-1.2.0
+  - splitmix-0.1.0.3
+  - numhask-space-0.7.0.0
 
+allow-newer: true
