diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+1.2
+---
+* Added instances for `ForeignPtr`.
+
 1.1.1.1
 -------
 * Relaxed upper version bound for `stm`.
diff --git a/StateVar.cabal b/StateVar.cabal
--- a/StateVar.cabal
+++ b/StateVar.cabal
@@ -1,5 +1,5 @@
 name: StateVar
-version: 1.1.1.1
+version: 1.2
 synopsis: State variables
 description:
   This package contains state variables, which are references in the IO monad,
@@ -23,8 +23,8 @@
   GHC == 8.0.2
   GHC == 8.2.2
   GHC == 8.4.3
-  GHC == 8.6.1
-  GHC == 8.7.*
+  GHC == 8.6.5
+  GHC == 8.8.1
 cabal-version: >= 1.10
 extra-source-files:
   README.md
diff --git a/src/Data/StateVar.hs b/src/Data/StateVar.hs
--- a/src/Data/StateVar.hs
+++ b/src/Data/StateVar.hs
@@ -10,7 +10,7 @@
 --------------------------------------------------------------------------------
 -- |
 -- Module      :  Data.StateVar
--- Copyright   :  (c) Edward Kmett 2014-2015, Sven Panne 2009-2018
+-- Copyright   :  (c) Edward Kmett 2014-2019, Sven Panne 2009-2018
 -- License     :  BSD3
 -- 
 -- Maintainer  :  Sven Panne <svenpanne@gmail.com>
@@ -81,6 +81,7 @@
 import Control.Monad.IO.Class
 import Data.IORef
 import Data.Typeable
+import Foreign.ForeignPtr
 import Foreign.Ptr
 import Foreign.Storable
 #if MIN_VERSION_base(4,12,0)
@@ -195,6 +196,10 @@
   p $= a = liftIO $ atomically $ writeTVar p a
   {-# INLINE ($=) #-}
 
+instance Storable a => HasSetter (ForeignPtr a) a where
+  p $= a = liftIO $ withForeignPtr p ($= a)
+  {-# INLINE ($=) #-}
+
 --------------------------------------------------------------------
 -- * HasUpdate
 --------------------------------------------------------------------
@@ -252,6 +257,10 @@
     a <- readTVar r
     writeTVar r $! f a
 
+instance Storable a => HasUpdate (ForeignPtr a) a a where
+  p $~ f = liftIO $ withForeignPtr p ($~ f)
+  p $~! f = liftIO $ withForeignPtr p ($~! f)
+
 --------------------------------------------------------------------
 -- * HasGetter
 --------------------------------------------------------------------
@@ -283,3 +292,8 @@
 instance HasGetter (IORef a) a where
   get = liftIO . readIORef
   {-# INLINE get #-}
+
+instance Storable a => HasGetter (ForeignPtr a) a where
+  get p = liftIO $ withForeignPtr p get
+  {-# INLINE get #-}
+
