diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,12 @@
-# Changelog for zydiskell
+[0.2.0.0] - Unreleased
 
-## Unreleased changes
+  * **Note**: breaking change.
+    * `Zydis.Decoder.decodeFullBuffer` now return a `Seq` instead of a `Vector`.
+    * introduce `ZyanStatus`, `ZyanCoreStatus` and `ZydisStatus` in `Zydis.Status` which are directly mapped from their C counterparts.
+
+  * remove `vector` dependency
+  * introduce `containers` dependency
+
+[0.1.1.0] - November 2020
+
+  * initial release
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,3 +1,6 @@
+[![build status](https://github.com/nerded1337/zydiskell/workflows/build/badge.svg)](https://github.com/nerded1337/zydiskell/actions)
+[![hackage version](https://img.shields.io/hackage/v/zydiskell)](https://hackage.haskell.org/package/zydiskell)
+
 # Zydiskell
 
 Haskell langage binding for the [Zydis library](https://github.com/zyantific/zydis), a fast and lightweight x86/x86-64 disassembler.
@@ -7,7 +10,9 @@
 - Recursively clone the project: `git clone --recursive https://github.com/nerded1337/zydiskell`
 - Either use Stack or Cabal: `stack build` | `cabal v2-build`
 
-Note: The [Zydis library](https://github.com/zyantific/zydis) will be directly compiled by GHC.
+Notes:
+- the [Zydis library](https://github.com/zyantific/zydis) is directly embedded and compiled by GHC.
+- we support the last three major GHC versions, currently: `8.6`, `8.8` and `8.10`
 
 ## Interface
 
@@ -27,7 +32,7 @@
   -> IO (Either Z.ZyanStatus Z.DecodedInstruction)
 
 Z.decodeFullBuffer
-  :: Z.Decoder -> ByteString -> IO (Either Z.ZyanStatus (Vector Z.DecodedInstruction))
+  :: Z.Decoder -> ByteString -> IO (Either Z.ZyanStatus (Seq Z.DecodedInstruction))
 ```
 
 ## Example
@@ -36,7 +41,7 @@
 
 module Main where
 
-import           Data.Vector
+import           Data.Sequence
 import           Data.Bifoldable
 import qualified Zydis                         as Z
 
@@ -68,7 +73,7 @@
   {-
       Given the decoded buffer, should output: [MnemonicMov,MnemonicPush,MnemonicRet]
   -}
-  printMnemonics :: Vector Z.DecodedInstruction -> IO ()
+  printMnemonics :: Seq Z.DecodedInstruction -> IO ()
   printMnemonics = print . fmap Z.decodedInstructionMnemonic
 
   decode :: Z.Decoder -> IO ()
diff --git a/src/Zydis/Decoder.hs b/src/Zydis/Decoder.hs
--- a/src/Zydis/Decoder.hs
+++ b/src/Zydis/Decoder.hs
@@ -23,6 +23,8 @@
 
 module Zydis.Decoder
   ( ZyanStatus
+  , ZydisStatus(..)
+  , ZyanCoreStatus(..)
   , ZyanUSize
   , Offset
   , Length
@@ -32,16 +34,17 @@
   )
 where
 
-import           Data.Bits
 import           Data.ByteString               as BS
 import           Data.ByteString.Internal
-import           Data.Vector
+import           Data.Sequence
 import           Data.Word
 import           Foreign.ForeignPtr
 import           Foreign.Marshal
 import           Foreign.Ptr
 import           Foreign.Storable
+
 import           Zydis.Types
+import           Zydis.Status
 
 -- * FFI types
 
@@ -49,8 +52,6 @@
 
 type AddressWidthC = Word32
 
-type ZyanStatus = Word32
-
 type ZyanUSize = Word64
 
 type Offset = ZyanUSize
@@ -60,27 +61,24 @@
 -- * FFI declarations
 
 foreign import ccall unsafe "ZydisDecoderInit" c_ZydisDecoderInit
-  :: Ptr Decoder -> MachineModeC -> AddressWidthC -> IO ZyanStatus
+  :: Ptr Decoder -> MachineModeC -> AddressWidthC -> IO ZyanNativeStatus
 
 foreign import ccall unsafe "ZydisDecoderDecodeBuffer" c_ZydisDecoderDecodeBuffer
-  :: Ptr Decoder -> Ptr Word8 -> ZyanUSize -> Ptr DecodedInstruction -> IO ZyanStatus
+  :: Ptr Decoder -> Ptr Word8 -> ZyanUSize -> Ptr DecodedInstruction -> IO ZyanNativeStatus
 
 -- * FFI bridges
 
--- | Directly stolen from https://github.com/zyantific/zycore-c/blob/71440fa634d1313db735d3262d453be641bb404f/include/Zycore/Status.h#L81
-zyanSuccess :: Word32 -> Bool
-zyanSuccess x = (x .&. 0x80000000) == 0
-{-# INLINE zyanSuccess #-}
-
 -- | Initialize a Zydis decoder, required to decode instructions.
 initialize :: MachineMode -> AddressWidth -> IO (Either ZyanStatus Decoder)
 initialize mm aw = alloca go
  where
-  go decoder = do
-    r <- c_ZydisDecoderInit decoder
+  go decoderPtr = do
+    r <- c_ZydisDecoderInit decoderPtr
                             (fromIntegral $ fromEnum mm)
                             (fromIntegral $ fromEnum aw)
-    if zyanSuccess r then Right <$> peek decoder else pure $ Left r
+    case fromZyanNativeStatus r of
+      Left ZyanCoreStatusSuccess -> Right <$> peek decoderPtr
+      x                          -> pure $ Left x
 {-# INLINE initialize #-}
 
 -- | Decode a single intruction.
@@ -106,27 +104,26 @@
 
 -- | Efficiently decode an entire buffer of instructions.
 decodeFullBuffer
-  :: Decoder -> ByteString -> IO (Either ZyanStatus (Vector DecodedInstruction))
+  :: Decoder -> ByteString -> IO (Either ZyanStatus (Seq DecodedInstruction))
 decodeFullBuffer d bs = alloca @Decoder go
  where
   (bufferForeignPtr, _, bufferLength) = toForeignPtr bs
 
-  go decoderPtr = alloca @DecodedInstruction $ go' decoderPtr
+  go = alloca @DecodedInstruction . go'
 
-  go' decoderPtr decodedInstructionPtr =
-    withForeignPtr bufferForeignPtr $ go'' decoderPtr decodedInstructionPtr
+  go' decoderPtr = withForeignPtr bufferForeignPtr . go'' decoderPtr
 
   go'' decoderPtr decodedInstructionPtr bufferPtr = do
     poke decoderPtr d
-    loop (mempty @(Vector DecodedInstruction), 0, fromIntegral bufferLength)
+    loop mempty 0 (fromIntegral bufferLength)
    where
-    loop (!v, !o, !l)
+    loop !v !o !l
       | l > 0 = do
         x <- doDecodeInstruction decoderPtr decodedInstructionPtr bufferPtr o l
         case x of
           Right i -> do
             let il = fromIntegral $ decodedInstructionLength i
-            loop (v <> pure i, o + il, l - il)
+            loop (v :|> i) (o + il) (l - il)
           Left s -> pure $ Left s
       | otherwise = pure $ Right v
 {-# INLINE decodeFullBuffer #-}
@@ -143,5 +140,7 @@
                                   (plusPtr bufferPtr (fromIntegral o))
                                   l
                                   decodedInstructionPtr
-  if zyanSuccess r then Right <$> peek decodedInstructionPtr else pure $ Left r
+  case fromZyanNativeStatus r of
+    Left ZyanCoreStatusSuccess -> Right <$> peek decodedInstructionPtr
+    x                          -> pure $ Left x
 {-# INLINE doDecodeInstruction #-}
diff --git a/src/Zydis/Operand.hs b/src/Zydis/Operand.hs
--- a/src/Zydis/Operand.hs
+++ b/src/Zydis/Operand.hs
@@ -111,7 +111,7 @@
     , operandMemoryBase         :: !Register
     , operandMemoryIndex        :: !Register
     , operandMemoryScale        :: {-# UNPACK #-}!Word8
-    , operandMemoryDisplacement :: !OperandMemoryDisplacement
+    , operandMemoryDisplacement :: {-# UNPACK #-}!OperandMemoryDisplacement
     }
   deriving stock (Show, Eq)
 
@@ -144,9 +144,9 @@
     , operandElementSize  :: {-# UNPACK #-}!Word16
     , operandElementCount :: {-# UNPACK #-}!Word16
     , operandRegister     :: !Register
-    , operandMemory       :: !OperandMemory
-    , operandPointer      :: !OperandPointer
-    , operandImmediate    :: !OperandImmediate
+    , operandMemory       :: {-# UNPACK #-}!OperandMemory
+    , operandPointer      :: {-# UNPACK #-}!OperandPointer
+    , operandImmediate    :: {-# UNPACK #-}!OperandImmediate
     }
   deriving stock (Show, Eq)
 
diff --git a/src/Zydis/Status.hs b/src/Zydis/Status.hs
new file mode 100644
--- /dev/null
+++ b/src/Zydis/Status.hs
@@ -0,0 +1,244 @@
+-- Status.hs ---
+
+-- Copyright (C) 2020 Nerd Ed
+
+-- Author: Nerd Ed <nerded.nerded@gmail.com>
+
+-- This program is free software; you can redistribute it and/or
+-- modify it under the terms of the GNU General Public License
+-- as published by the Free Software Foundation; either version 3
+-- of the License, or (at your option) any later version.
+
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+{-# LANGUAGE DerivingStrategies #-}
+
+-- | This module implement the zycore/zydis status codes.
+--
+-- Zycore ref: https://github.com/zyantific/zycore-c/blob/71440fa634d1313db735d3262d453be641bb404f/include/Zycore/Status.h#L134
+--
+-- Zydis ref: https://github.com/zyantific/zydis/blob/675c90ee7bc80d1aa6273e5ecfba0bd293bf89e9/include/Zydis/Status.h#L55
+--
+module Zydis.Status
+  ( ZyanCoreStatus(..)
+  , ZydisStatus(..)
+  , ZyanStatus
+  , ZyanNativeStatus
+  , fromZyanNativeStatus
+  )
+where
+
+import           Data.Bits
+import           Data.Word
+
+data ZyanCoreStatus
+  = ZyanCoreStatusSuccess
+  | ZyanCoreStatusFailed
+  | ZyanCoreStatusTrue
+  | ZyanCoreStatusFalse
+  | ZyanCoreStatusInvalidArgument
+  | ZyanCoreStatusInvalidOperation
+  | ZyanCoreStatusAccessDenied
+  | ZyanCoreStatusNotFound
+  | ZyanCoreStatusOutOfRange
+  | ZyanCoreStatusInsufficientBufferSize
+  | ZyanCoreStatusNotEnoughMemory
+  | ZyanCoreStatusBadSystemCall
+  | ZyanCoreStatusOutOfResources
+  | ZyanCoreStatusMissingDependency
+  deriving stock (Show, Eq)
+
+data ZydisStatus
+  = ZydisStatusInvalidMask
+  | ZydisStatusMalformedMvex
+  | ZydisStatusMalformedEvex
+  | ZydisStatusInvalidMap
+  | ZydisStatusIllegalRex
+  | ZydisStatusIllegalLegacyPFX
+  | ZydisStatusIllegalLock
+  | ZydisStatusBadRegister
+  | ZydisStatusInstructionTooLong
+  | ZydisStatusNoMoreData
+  | ZydisStatusDecodingError
+  | ZydisStatusSkipToken
+  deriving stock (Show, Eq)
+
+type ZyanStatus = Either ZyanCoreStatus ZydisStatus
+
+type IsError = Bool
+
+type ZyanNativeModule = Word16
+
+type ZyanNativeStatusCode = Word32
+
+type ZyanNativeStatus = Word32
+
+-- | Combine the values into a unique error code.
+--
+-- This function is a direct copy of https://github.com/zyantific/zycore-c/blob/71440fa634d1313db735d3262d453be641bb404f/include/Zycore/Status.h#L67
+--
+makeZyanNativeStatus
+  :: IsError -> ZyanNativeModule -> ZyanNativeStatusCode -> ZyanNativeStatus
+makeZyanNativeStatus e m c =
+  ((if e then 1 else 0) `shiftL` 31)
+    .|. ((fromIntegral m .&. 0x7FF) `shiftL` 20)
+    .|. (c .&. 0xFFFFF)
+{-# INLINE makeZyanNativeStatus #-}
+
+-- * Core status
+
+zyanModuleCore :: ZyanNativeModule
+zyanModuleCore = 0x001
+{-# INLINE zyanModuleCore #-}
+
+zyanCoreStatusSuccess :: ZyanNativeStatus
+zyanCoreStatusSuccess = makeZyanNativeStatus False zyanModuleCore 0x00
+{-# INLINE zyanCoreStatusSuccess #-}
+
+zyanCoreStatusFailed :: ZyanNativeStatus
+zyanCoreStatusFailed = makeZyanNativeStatus True zyanModuleCore 0x01
+{-# INLINE zyanCoreStatusFailed #-}
+
+zyanCoreStatusTrue :: ZyanNativeStatus
+zyanCoreStatusTrue = makeZyanNativeStatus False zyanModuleCore 0x02
+{-# INLINE zyanCoreStatusTrue #-}
+
+zyanCoreStatusFalse :: ZyanNativeStatus
+zyanCoreStatusFalse = makeZyanNativeStatus False zyanModuleCore 0x03
+{-# INLINE zyanCoreStatusFalse #-}
+
+zyanCoreStatusInvalidArgument :: ZyanNativeStatus
+zyanCoreStatusInvalidArgument = makeZyanNativeStatus True zyanModuleCore 0x04
+{-# INLINE zyanCoreStatusInvalidArgument #-}
+
+zyanCoreStatusInvalidOperation :: ZyanNativeStatus
+zyanCoreStatusInvalidOperation = makeZyanNativeStatus True zyanModuleCore 0x05
+{-# INLINE zyanCoreStatusInvalidOperation #-}
+
+zyanCoreStatusAccessDenied :: ZyanNativeStatus
+zyanCoreStatusAccessDenied = makeZyanNativeStatus True zyanModuleCore 0x06
+{-# INLINE zyanCoreStatusAccessDenied #-}
+
+zyanCoreStatusNotFound :: ZyanNativeStatus
+zyanCoreStatusNotFound = makeZyanNativeStatus True zyanModuleCore 0x07
+{-# INLINE zyanCoreStatusNotFound #-}
+
+zyanCoreStatusOutOfRange :: ZyanNativeStatus
+zyanCoreStatusOutOfRange = makeZyanNativeStatus True zyanModuleCore 0x08
+{-# INLINE zyanCoreStatusOutOfRange #-}
+
+zyanCoreStatusInsufficientBufferSize :: ZyanNativeStatus
+zyanCoreStatusInsufficientBufferSize =
+  makeZyanNativeStatus True zyanModuleCore 0x09
+{-# INLINE zyanCoreStatusInsufficientBufferSize #-}
+
+zyanCoreStatusNotEnoughMemory :: ZyanNativeStatus
+zyanCoreStatusNotEnoughMemory = makeZyanNativeStatus True zyanModuleCore 0x0A
+{-# INLINE zyanCoreStatusNotEnoughMemory #-}
+
+zyanCoreStatusBadSystemCall :: ZyanNativeStatus
+zyanCoreStatusBadSystemCall = makeZyanNativeStatus True zyanModuleCore 0x0B
+{-# INLINE zyanCoreStatusBadSystemCall #-}
+
+zyanCoreStatusOutOfResources :: ZyanNativeStatus
+zyanCoreStatusOutOfResources = makeZyanNativeStatus True zyanModuleCore 0x0C
+{-# INLINE zyanCoreStatusOutOfResources #-}
+
+zyanCoreStatusMissingDependency :: ZyanNativeStatus
+zyanCoreStatusMissingDependency = makeZyanNativeStatus True zyanModuleCore 0x0D
+{-# INLINE zyanCoreStatusMissingDependency #-}
+
+-- * Zydis status
+zyanModuleZydis :: ZyanNativeModule
+zyanModuleZydis = 0x002
+{-# INLINE zyanModuleZydis #-}
+
+zydisStatusNoMoreData :: ZyanNativeStatus
+zydisStatusNoMoreData = makeZyanNativeStatus True zyanModuleZydis 0x00
+{-# INLINE zydisStatusNoMoreData #-}
+
+zydisStatusDecodingError :: ZyanNativeStatus
+zydisStatusDecodingError = makeZyanNativeStatus True zyanModuleZydis 0x01
+{-# INLINE zydisStatusDecodingError #-}
+
+zydisStatusInstructionTooLong :: ZyanNativeStatus
+zydisStatusInstructionTooLong = makeZyanNativeStatus True zyanModuleZydis 0x02
+{-# INLINE zydisStatusInstructionTooLong #-}
+
+zydisStatusBadRegister :: ZyanNativeStatus
+zydisStatusBadRegister = makeZyanNativeStatus True zyanModuleZydis 0x03
+{-# INLINE zydisStatusBadRegister #-}
+
+zydisStatusIllegalLock :: ZyanNativeStatus
+zydisStatusIllegalLock = makeZyanNativeStatus True zyanModuleZydis 0x04
+{-# INLINE zydisStatusIllegalLock #-}
+
+zydisStatusIllegalLegacyPFX :: ZyanNativeStatus
+zydisStatusIllegalLegacyPFX = makeZyanNativeStatus True zyanModuleZydis 0x05
+{-# INLINE zydisStatusIllegalLegacyPFX #-}
+
+zydisStatusIllegalRex :: ZyanNativeStatus
+zydisStatusIllegalRex = makeZyanNativeStatus True zyanModuleZydis 0x06
+{-# INLINE zydisStatusIllegalRex #-}
+
+zydisStatusInvalidMap :: ZyanNativeStatus
+zydisStatusInvalidMap = makeZyanNativeStatus True zyanModuleZydis 0x07
+{-# INLINE zydisStatusInvalidMap #-}
+
+zydisStatusMalformedEvex :: ZyanNativeStatus
+zydisStatusMalformedEvex = makeZyanNativeStatus True zyanModuleZydis 0x08
+{-# INLINE zydisStatusMalformedEvex #-}
+
+zydisStatusMalformedMvex :: ZyanNativeStatus
+zydisStatusMalformedMvex = makeZyanNativeStatus True zyanModuleZydis 0x09
+{-# INLINE zydisStatusMalformedMvex #-}
+
+zydisStatusInvalidMask :: ZyanNativeStatus
+zydisStatusInvalidMask = makeZyanNativeStatus True zyanModuleZydis 0x0A
+{-# INLINE zydisStatusInvalidMask #-}
+
+zydisStatusSkipToken :: ZyanNativeStatus
+zydisStatusSkipToken = makeZyanNativeStatus False zyanModuleZydis 0x0B
+{-# INLINE zydisStatusSkipToken #-}
+
+-- | Marshal low level Zyan/Zydis status to our "ZyanStatus".
+--
+-- This function must cover the complete range of possibilities.
+--
+fromZyanNativeStatus :: ZyanNativeStatus -> ZyanStatus
+fromZyanNativeStatus s
+  | s == zyanCoreStatusSuccess = Left ZyanCoreStatusSuccess
+  | s == zyanCoreStatusFailed = Left ZyanCoreStatusFailed
+  | s == zyanCoreStatusTrue = Left ZyanCoreStatusTrue
+  | s == zyanCoreStatusFalse = Left ZyanCoreStatusFalse
+  | s == zyanCoreStatusInvalidArgument = Left ZyanCoreStatusInvalidArgument
+  | s == zyanCoreStatusInvalidOperation = Left ZyanCoreStatusInvalidOperation
+  | s == zyanCoreStatusAccessDenied = Left ZyanCoreStatusAccessDenied
+  | s == zyanCoreStatusNotFound = Left ZyanCoreStatusNotFound
+  | s == zyanCoreStatusOutOfRange = Left ZyanCoreStatusOutOfRange
+  | s == zyanCoreStatusInsufficientBufferSize = Left
+    ZyanCoreStatusInsufficientBufferSize
+  | s == zyanCoreStatusNotEnoughMemory = Left ZyanCoreStatusNotEnoughMemory
+  | s == zyanCoreStatusBadSystemCall = Left ZyanCoreStatusBadSystemCall
+  | s == zyanCoreStatusOutOfResources = Left ZyanCoreStatusOutOfResources
+  | s == zyanCoreStatusMissingDependency = Left ZyanCoreStatusMissingDependency
+  | s == zydisStatusNoMoreData = Right ZydisStatusNoMoreData
+  | s == zydisStatusInvalidMask = Right ZydisStatusInvalidMask
+  | s == zydisStatusMalformedMvex = Right ZydisStatusMalformedMvex
+  | s == zydisStatusMalformedEvex = Right ZydisStatusMalformedEvex
+  | s == zydisStatusInvalidMap = Right ZydisStatusInvalidMap
+  | s == zydisStatusIllegalRex = Right ZydisStatusIllegalRex
+  | s == zydisStatusIllegalLegacyPFX = Right ZydisStatusIllegalLegacyPFX
+  | s == zydisStatusIllegalLock = Right ZydisStatusIllegalLock
+  | s == zydisStatusBadRegister = Right ZydisStatusBadRegister
+  | s == zydisStatusInstructionTooLong = Right ZydisStatusInstructionTooLong
+  | s == zydisStatusDecodingError = Right ZydisStatusDecodingError
+  | s == zydisStatusSkipToken = Right ZydisStatusSkipToken
+  | otherwise = error $ "Fatal error, missing zyan status code: " <> show s
+{-# INLINE fromZyanNativeStatus #-}
diff --git a/src/Zydis/Types.hs b/src/Zydis/Types.hs
--- a/src/Zydis/Types.hs
+++ b/src/Zydis/Types.hs
@@ -380,16 +380,16 @@
 data DecodedInstructionRaw =
   DecodedInstructionRaw
   { decodedInstructionRawPrefixCount :: {-# UNPACK #-}!Word8
-  , decodedInstructionRawPrefixes    :: !(Vec ZydisMaxInstructionLength DecodedInstructionRawPrefix)
-  , decodedInstructionRawRex         :: !DecodedInstructionRawRex
-  , decodedInstructionRawXop         :: !DecodedInstructionRawXop
-  , decodedInstructionRawVex         :: !DecodedInstructionRawVex
-  , decodedInstructionRawEvex        :: !DecodedInstructionRawEvex
-  , decodedInstructionRawMvex        :: !DecodedInstructionRawMvex
-  , decodedInstructionRawModRm       :: !DecodedInstructionModRm
-  , decodedInstructionRawSib         :: !DecodedInstructionRawSib
-  , decodedInstructionRawDisp        :: !DecodedInstructionRawDisp
-  , decodedInstructionRawImmediates  :: !(Vec ZydisRawImmediateCount DecodedInstructionRawImmediate)
+  , decodedInstructionRawPrefixes    :: {-# UNPACK #-}!(Vec ZydisMaxInstructionLength DecodedInstructionRawPrefix)
+  , decodedInstructionRawRex         :: {-# UNPACK #-}!DecodedInstructionRawRex
+  , decodedInstructionRawXop         :: {-# UNPACK #-}!DecodedInstructionRawXop
+  , decodedInstructionRawVex         :: {-# UNPACK #-}!DecodedInstructionRawVex
+  , decodedInstructionRawEvex        :: {-# UNPACK #-}!DecodedInstructionRawEvex
+  , decodedInstructionRawMvex        :: {-# UNPACK #-}!DecodedInstructionRawMvex
+  , decodedInstructionRawModRm       :: {-# UNPACK #-}!DecodedInstructionModRm
+  , decodedInstructionRawSib         :: {-# UNPACK #-}!DecodedInstructionRawSib
+  , decodedInstructionRawDisp        :: {-# UNPACK #-}!DecodedInstructionRawDisp
+  , decodedInstructionRawImmediates  :: {-# UNPACK #-}!(Vec ZydisRawImmediateCount DecodedInstructionRawImmediate)
   }
   deriving stock (Show, Eq)
 
@@ -485,8 +485,8 @@
 data DecodedInstructionAvx =
   DecodedInstructionAvx
     { decodedInstructionAvxVectorLength    :: {-# UNPACK #-}!Word16
-    , decodedInstructionAvxMask            :: !DecodedInstructionAvxMask
-    , decodedInstructionAvxBroadcast       :: !DecodedInstructionAvxBroadcast
+    , decodedInstructionAvxMask            :: {-# UNPACK #-}!DecodedInstructionAvxMask
+    , decodedInstructionAvxBroadcast       :: {-# UNPACK #-}!DecodedInstructionAvxBroadcast
     , decodedInstructionAvxRoundingMode    :: !RoundingMode
     , decodedInstructionAvxSwizzleMode     :: !SwizzleMode
     , decodedInstructionAvxConversionMode  :: !ConversionMode
@@ -526,12 +526,12 @@
     , decodedInstructionOperandWidth  :: {-# UNPACK #-}!Word8
     , decodedInstructionAddressWidth  :: {-# UNPACK #-}!Word8
     , decodedInstructionOperandCount  :: {-# UNPACK #-}!Word8
-    , decodedInstructionOperands      :: !(Vec ZydisMaxOperandCount Operand)
+    , decodedInstructionOperands      :: {-# UNPACK #-}!(Vec ZydisMaxOperandCount Operand)
     , decodedInstructionAttributes    :: {-# UNPACK #-}!Word64
-    , decodedInstructionAccessedFlags :: !(Vec (ZydisCpuFlagMaxValue + 1) CPUFlagAction)
-    , decodedInstructionAvx           :: !DecodedInstructionAvx
-    , decodedInstructionMeta          :: !DecodedInstructionMeta
-    , decodedInstructionRaw           :: !DecodedInstructionRaw
+    , decodedInstructionAccessedFlags :: {-# UNPACK #-}!(Vec (ZydisCpuFlagMaxValue + 1) CPUFlagAction)
+    , decodedInstructionAvx           :: {-# UNPACK #-}!DecodedInstructionAvx
+    , decodedInstructionMeta          :: {-# UNPACK #-}!DecodedInstructionMeta
+    , decodedInstructionRaw           :: {-# UNPACK #-}!DecodedInstructionRaw
     }
   deriving stock (Show, Eq)
 
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -21,7 +21,7 @@
 
 module Main where
 
-import           Data.Vector
+import           Data.Sequence
 import           Data.Bifoldable
 import qualified Zydis                         as Z
 
@@ -53,7 +53,7 @@
   {-
       Given the decoded buffer, should output: [MnemonicMov,MnemonicPush,MnemonicRet]
   -}
-  printMnemonics :: Vector Z.DecodedInstruction -> IO ()
+  printMnemonics :: Seq Z.DecodedInstruction -> IO ()
   printMnemonics = print . fmap Z.decodedInstructionMnemonic
 
   decode :: Z.Decoder -> IO ()
diff --git a/zydiskell.cabal b/zydiskell.cabal
--- a/zydiskell.cabal
+++ b/zydiskell.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           zydiskell
-version:        0.1.1.0
+version:        0.2.0.0
 synopsis:       Haskell language binding for the Zydis library, a x86/x86-64 disassembler.
 description:    Please see the README on GitHub at <https://github.com/nerded1337/zydiskell#readme>
 category:       System, Parsing, Disassembler
@@ -53,6 +53,7 @@
       Zydis.PrefixType
       Zydis.Register
       Zydis.RoundingMode
+      Zydis.Status
       Zydis.SwizzleMode
       Zydis.Types
       Zydis.Util
@@ -140,9 +141,9 @@
   build-depends:
       base >=4.7 && <4.15
     , bytestring >=0.10 && <0.11
+    , containers >=0.6 && <0.7
     , fixed-vector >=1.2 && <1.3
     , storable-record >=0.0.5 && <0.0.6
-    , vector >=0.12 && <0.13
   default-language: Haskell2010
 
 test-suite zydiskell-tests
@@ -156,8 +157,8 @@
   build-depends:
       base >=4.7 && <4.15
     , bytestring >=0.10 && <0.11
+    , containers >=0.6 && <0.7
     , fixed-vector >=1.2 && <1.3
     , storable-record >=0.0.5 && <0.0.6
-    , vector >=0.12 && <0.13
     , zydiskell
   default-language: Haskell2010
