diff --git a/promises.cabal b/promises.cabal
--- a/promises.cabal
+++ b/promises.cabal
@@ -1,6 +1,6 @@
 name:          promises
 category:      Lazy, Concurrent
-version:       0.1
+version:       0.2
 license:       BSD3
 cabal-version: >= 1.10
 license-file:  LICENSE
@@ -34,5 +34,5 @@
     Data.Promise
 
   build-depends:
-    base     >= 4.7   && < 5,
-    monad-st >= 0.2.4 && < 1
+    base      >= 4.7 && < 5,
+    primitive >= 0.6 && < 1
diff --git a/src/Data/Promise.hs b/src/Data/Promise.hs
--- a/src/Data/Promise.hs
+++ b/src/Data/Promise.hs
@@ -40,13 +40,12 @@
 import Control.Exception
 import Control.Monad (ap)
 import Control.Monad.Fix
-import Control.Monad.ST.Class
+import Control.Monad.Primitive
 import Control.Monad.ST.Unsafe
 import Data.Typeable
 import System.IO.Unsafe
 import Unsafe.Coerce
 
-
 -- | Thrown when the answer for an unfulfillable promise is demanded.
 data BrokenPromise = BrokenPromise deriving (Show, Typeable)
 instance Exception BrokenPromise
@@ -118,9 +117,9 @@
       go (Fulfilled v k) = return $ Fulfilled v (k >>= go)
     in getLazy m mv >>= go
 
-instance MonadST (Lazy s) where
-  type World (Lazy s) = s
-  liftST m = Lazy $ \_ -> Pure <$> unsafeSTToIO m
+instance PrimMonad (Lazy s) where
+  type PrimState (Lazy s) = s
+  primitive m = Lazy $ \_ -> Pure <$> unsafeSTToIO (primitive m)
 
 instance MonadFix (Lazy s) where
   mfix f = do
