diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 # Change log for [raaz].
 
+## [0.2.3] - 25 April, 2021
+
+This is a minor release just update package dependencies.
+
+* Get raaz to work with ghc-9.0
+
 ## [0.2.2] - 13 December, 2020
 
 This is a minor release just update package dependencies.
@@ -81,4 +87,5 @@
 [0.2.0]: <http://github.com/raaz-crypto/raaz/releases/tag/v0.2.0>
 [0.2.1]: <http://github.com/raaz-crypto/raaz/releases/tag/v0.2.1>
 [0.2.2]: <http://github.com/raaz-crypto/raaz/releases/tag/v0.2.2>
+[0.2.3]: <http://github.com/raaz-crypto/raaz/releases/tag/v0.2.3>
 [raaz]:  <http://github.com/raaz-crypto/raaz/>
diff --git a/Raaz/Core/Memory.hs b/Raaz/Core/Memory.hs
--- a/Raaz/Core/Memory.hs
+++ b/Raaz/Core/Memory.hs
@@ -14,6 +14,7 @@
 {-# LANGUAGE RankNTypes                 #-}
 {-# LANGUAGE MultiParamTypeClasses      #-}
 {-# LANGUAGE FlexibleInstances          #-}
+{-# LANGUAGE CPP                        #-}
 
 module Raaz.Core.Memory
        (
@@ -42,6 +43,11 @@
 
 import           Control.Applicative
 import           Control.Monad.IO.Class
+
+#if MIN_VERSION_base(4,9,0)
+import           Data.Kind
+#endif
+
 import           Foreign.Storable            ( Storable )
 import           Foreign.Ptr                 ( castPtr, Ptr )
 import           Raaz.Core.MonoidalAction
@@ -153,7 +159,14 @@
 -- currently there is no easy way to enforce this.
 --
 
+
+#if MIN_VERSION_base(4,9,0)
+class MemoryThread (mT :: Type -> Type -> Type) where
+#else
 class MemoryThread (mT :: * -> * -> *) where
+#endif
+
+
   -- | Run a memory action with the internal memory allocated from a
   -- locked memory buffer. This memory buffer will never be swapped
   -- out by the operating system and will be wiped clean before
diff --git a/Raaz/Core/Primitives.hs b/Raaz/Core/Primitives.hs
--- a/Raaz/Core/Primitives.hs
+++ b/Raaz/Core/Primitives.hs
@@ -23,6 +23,11 @@
        ) where
 
 import Data.Monoid
+
+#if MIN_VERSION_base(4,9,0)
+import           Data.Kind
+#endif
+
 import Prelude
 
 import Raaz.Core.Types
@@ -60,7 +65,11 @@
 
   -- | Associated type that captures an implementation of this
   -- primitive.
+#if MIN_VERSION_base(4,9,0)
+  type Implementation p :: Type
+#else
   type Implementation p :: *
+#endif
 
 -- | Primitives that have a recommended implementations.
 class Primitive p => Recommendation p where
@@ -80,7 +89,11 @@
 -- | Some primitives like ciphers have an encryption/decryption key. This
 -- type family captures the key associated with a primitive if it has
 -- any.
+#if MIN_VERSION_base(4,9,0)
+type family  Key prim :: Type
+#else
 type family  Key prim :: *
+#endif
 
 ------------------- Type safe lengths in units of block ----------------
 
diff --git a/raaz.cabal b/raaz.cabal
--- a/raaz.cabal
+++ b/raaz.cabal
@@ -1,5 +1,5 @@
 name:    raaz
-version: 0.2.2
+version: 0.2.3
 
 synopsis: The raaz cryptographic library.
 
@@ -170,7 +170,7 @@
                , Raaz.Random.ChaCha20PRG
                , Raaz.Entropy
                , Paths_raaz
-  build-depends: base                           >= 4.6  &&  < 4.15
+  build-depends: base                           >= 4.6  &&  < 4.16
                , bytestring                     >= 0.9  &&  < 0.12
                , deepseq                        >= 1.1  &&  < 1.5
                , vector                         >= 0.7.1 && < 0.13
