diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 ## Changelog for the `vault` package
 
+**0.3.0.5**
+
+* Add support for GHC type roles extension, using the `RoleAnnotations` language pragma.
+
 **0.3.0.4** — Bump upper version bound for the `base` dependency.
 
 **0.3.0.3** — Bump upper version bound for the `base` dependency.
diff --git a/src/Data/Vault/ST/ST.hs b/src/Data/Vault/ST/ST.hs
--- a/src/Data/Vault/ST/ST.hs
+++ b/src/Data/Vault/ST/ST.hs
@@ -1,3 +1,7 @@
+#if __GLASGOW_HASKELL__ >= 708
+{-# LANGUAGE RoleAnnotations #-}
+#endif
+
 module Data.Vault.ST.LAZINESS (
     -- * Vault
     Vault, Key,
diff --git a/src/Data/Vault/ST/backends/GHC.hs b/src/Data/Vault/ST/backends/GHC.hs
--- a/src/Data/Vault/ST/backends/GHC.hs
+++ b/src/Data/Vault/ST/backends/GHC.hs
@@ -18,6 +18,11 @@
 newtype Vault s = Vault (Map Unique Any)
 newtype Key s a = Key Unique
 
+#if __GLASGOW_HASKELL__ >= 708
+type role Vault nominal
+type role Key nominal nominal
+#endif
+
 newKey = STUnsafe.unsafeIOToST $ Key <$> newUnique
 
 lookup (Key k) (Vault m) = fromAny <$> Map.lookup k m
diff --git a/vault.cabal b/vault.cabal
--- a/vault.cabal
+++ b/vault.cabal
@@ -1,5 +1,5 @@
 Name:               vault
-Version:            0.3.0.4
+Version:            0.3.0.5
 Synopsis:           a persistent store for values of arbitrary types
 Description:
   A /vault/ is a persistent store for values of arbitrary types.
@@ -10,7 +10,7 @@
   hence the name.
   .
   Also provided is a /locker/ type, representing a store for a single element.
-    
+
 Category:           Data
 License:            BSD3
 License-file:       LICENSE
