diff --git a/Changelog.md b/Changelog.md
new file mode 100644
--- /dev/null
+++ b/Changelog.md
@@ -0,0 +1,42 @@
+# Changelog
+
+## 1.1.0.0
+
+* Supports GHC 9.6
+* Migrates to recent toolchains
+
+## 1.0.0.1
+
+* Minor refactoring of test-suite to support inspection-testiong 0.5
+
+## 1.0.0.0
+
+* Drops Peano-numerals
+* Obsolete kind-generic classes
+* Now all types are kinded with GHC's builtin type-level naturals, and no type parameters for naturals.
+* Drops dependency for `singletons` package and their relatives.
+
+## 0.9.0.0
+
+* This is transitional change: preparation for future rework of `type-natural`
+  - Types and constraints in `Data.Sized.Builtin` is now incompatible with `Data.Sized` and `Data.Sized.Peano`
+  - The latter two modules will be removed in future release.
+* Removes `NilL` and `NilR`
+* Compolete overhaul on `Data.Sized.Builtin`
+  - Stop using orders from `Data.Singletons`
+  - Types of nested pattern synonyms can now be inferred correctly
+
+## 0.8.0.0
+
+* Makes `sLength` using `KnownNat` instance to get O(1) always.
+* Introduces `Nil` pattern and deprecates `NilL` and `NilR`.
+* Previously, in sepcialised modules for `Builtin` and `Peano`,
+  `elemIndex`, `elemIndices` and their Ordinal version were misimplemented;
+  they are now correctly uses their counterparts in `Data.Sized`.
+* Adds documentation for specialised modules.
+
+## 0.7.0.0
+
+* Stop using `ListLike` package and switched to [`subcategories`] package for the abstraction of sequential types.
+* Complete overhaul on type signatures.
+* Both `Data.Sized.Builtin` and `Data.Sized.Peano` exports specialised functions instead of reexporting functions from `Data.Sized`.
diff --git a/sized.cabal b/sized.cabal
--- a/sized.cabal
+++ b/sized.cabal
@@ -1,11 +1,12 @@
 cabal-version: 2.0
 name:          sized
-version:       1.0.0.2
+version:       1.1.0.0
 license:       BSD3
 license-file:  LICENSE
 maintainer:    konn.jinro_at_gmail.com
 author:        Hiromi ISHII
-tested-with:   GHC ==8.8.4 || ==8.10.7 || ==9.0.2 || ==9.2.5 || ==9.4.3
+tested-with:   GHC ==8.8.4 || ==8.10.7 || ==9.0.2 || ==9.2.7 || ==9.4.4 || ==9.6.1
+extra-doc-files: ./Changelog.md
 synopsis:      Sized sequence data-types
 description:
   A wrapper to make length-parametrized data-type from functorial data-types.
@@ -17,6 +18,7 @@
   type:     git
   location: git://github.com/konn/sized.git
 
+
 library
   exposed-modules:
     Data.Sized
@@ -26,7 +28,7 @@
   hs-source-dirs:   src
   other-modules:    Data.Sized.Internal
   default-language: Haskell2010
-  ghc-options:      -O2 -Wall -Wno-redundant-constraints
+  ghc-options:      -Wall -Wno-redundant-constraints
   build-depends:
       base                     >=4    && <5
     , constraints
@@ -34,34 +36,31 @@
     , deepseq                  >=1.4
     , equational-reasoning     >=0.5
     , ghc-typelits-knownnat
-    , ghc-typelits-presburger  >=0.5
+    , ghc-typelits-presburger  >=0.7.2
     , hashable                 >=1.2
     , lens                     >=0.14
     , mono-traversable         >=0.10
-    , subcategories
+    , subcategories            >=0.2
     , these
-    , type-natural             >=1.0
+    , type-natural             >=1.3
     , vector                   >=0.12
 
-  if impl(ghc >=9.4)
-    build-depends: ghc-typelits-presburger >=0.7.1
-
 test-suite optimisaion-test
   type:             exitcode-stdio-1.0
   main-is:          opt-test.hs
   hs-source-dirs:   test
   other-modules:    Shared
   default-language: Haskell2010
-  ghc-options:      -O2 -Wall -Wno-redundant-constraints -fno-hpc
+  ghc-options:      -Wall -Wno-redundant-constraints -fno-hpc
   build-depends:
       base
     , containers
     , inspection-testing        >=0.4 && <0.6
     , mono-traversable
+    , primitive
     , sized
     , subcategories
     , tasty
-    , tasty-expected-failure
     , tasty-inspection-testing
     , template-haskell
     , th-lift
diff --git a/src/Data/Sized.hs b/src/Data/Sized.hs
--- a/src/Data/Sized.hs
+++ b/src/Data/Sized.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE AllowAmbiguousTypes #-}
-{-# LANGUAGE CPP #-}
 {-# LANGUAGE ConstraintKinds #-}
+{-# LANGUAGE DataKinds #-}
 {-# LANGUAGE DeriveDataTypeable #-}
 {-# LANGUAGE DerivingStrategies #-}
 {-# LANGUAGE FlexibleContexts #-}
@@ -10,13 +10,13 @@
 {-# LANGUAGE LiberalTypeSynonyms #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE PolyKinds #-}
 {-# LANGUAGE QuantifiedConstraints #-}
 {-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE StandaloneDeriving #-}
 {-# LANGUAGE TypeApplications #-}
 {-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE TypeInType #-}
 {-# LANGUAGE TypeOperators #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE UndecidableSuperClasses #-}
@@ -25,7 +25,7 @@
 {-# LANGUAGE NoStarIsType #-}
 {-# OPTIONS_GHC -fenable-rewrite-rules #-}
 {-# OPTIONS_GHC -fno-warn-type-defaults -fno-warn-orphans #-}
-{-# OPTIONS_GHC -fplugin GHC.TypeLits.Presburger #-}
+{-# OPTIONS_GHC -fplugin Data.Type.Natural.Presburger.MinMaxSolver #-}
 
 {- | This module provides the functionality to make length-parametrized types
    from existing 'CFreeMonoid' sequential types.
@@ -278,7 +278,7 @@
   (Dom f a, KnownNat n) =>
   Sized f n a ->
   Int
-length = const $ fromIntegral $ toNatural $ sNat @n
+length = const $ fromIntegral $ fromSNat $ sNat @n
 {-# INLINE CONLIKE [1] length #-}
 
 lengthTLZero :: Sized f 0 a -> Int
@@ -539,7 +539,7 @@
   SNat n ->
   Sized f m a ->
   Sized f n a
-take = coerce $ ctake @f @a . P.fromIntegral . toNatural @n
+take = coerce $ ctake @f @a . P.fromIntegral . fromSNat @n
 {-# INLINE take #-}
 
 {- | @'takeAtMost' k xs@ takes first at most @k@ elements of @xs@.
@@ -552,7 +552,7 @@
   SNat n ->
   Sized f m a ->
   Sized f (Min n m) a
-takeAtMost = coerce $ ctake @f @a . P.fromIntegral . toNatural @n
+takeAtMost = coerce $ ctake @f @a . P.fromIntegral . fromSNat @n
 {-# INLINE takeAtMost #-}
 
 {- | @drop k xs@ drops first @k@ element of @xs@ and returns
@@ -566,7 +566,7 @@
   SNat n ->
   Sized f m a ->
   Sized f (m - n) a
-drop = coerce $ cdrop @f @a . P.fromIntegral . toNatural @n
+drop = coerce $ cdrop @f @a . P.fromIntegral . fromSNat @n
 {-# INLINE drop #-}
 
 {- | @splitAt k xs@ split @xs@ at @k@, where
@@ -581,7 +581,7 @@
   Sized f m a ->
   (Sized f n a, Sized f (m -. n) a)
 splitAt =
-  coerce $ csplitAt @f @a . P.fromIntegral . toNatural @n
+  coerce $ csplitAt @f @a . P.fromIntegral . fromSNat @n
 {-# INLINE splitAt #-}
 
 {- | @splitAtMost k xs@ split @xs@ at @k@.
@@ -596,7 +596,7 @@
   Sized f m a ->
   (Sized f (Min n m) a, Sized f (m -. n) a)
 splitAtMost =
-  coerce $ csplitAt @f @a . P.fromIntegral . toNatural @n
+  coerce $ csplitAt @f @a . P.fromIntegral . fromSNat @n
 {-# INLINE splitAtMost #-}
 
 --------------------------------------------------------------------------------
@@ -652,7 +652,7 @@
   SNat n ->
   a ->
   Sized f n a
-replicate = coerce $ creplicate @f @a . P.fromIntegral . toNatural @n
+replicate = coerce $ creplicate @f @a . P.fromIntegral . fromSNat @n
 {-# INLINE replicate #-}
 
 {- | 'replicate' with the length inferred.
@@ -679,7 +679,7 @@
   Sized f n a
 generate = coerce $ \sn ->
   withKnownNat sn $
-    cgenerate @f @a (P.fromIntegral $ toNatural @n sn)
+    cgenerate @f @a (P.fromIntegral $ fromSNat @n sn)
       . (. toEnum @(Ordinal n))
 {-# INLINE [1] generate #-}
 
@@ -700,7 +700,7 @@
   SNat n ->
   (Ordinal n -> a) ->
   Sized V.Vector n a
-genVector n f = withKnownNat n $ Sized $ V.generate (P.fromIntegral $ toNatural n) (f . toEnum)
+genVector n f = withKnownNat n $ Sized $ V.generate (P.fromIntegral $ fromSNat n) (f . toEnum)
 {-# INLINE genVector #-}
 
 genSVector ::
@@ -709,7 +709,7 @@
   SNat n ->
   (Ordinal n -> a) ->
   Sized SV.Vector n a
-genSVector n f = withKnownNat n $ Sized $ SV.generate (P.fromIntegral $ toNatural n) (f . toEnum)
+genSVector n f = withKnownNat n $ Sized $ SV.generate (P.fromIntegral $ fromSNat n) (f . toEnum)
 {-# INLINE genSVector #-}
 
 genSeq ::
@@ -717,7 +717,7 @@
   SNat n ->
   (Ordinal n -> a) ->
   Sized Seq.Seq n a
-genSeq n f = withKnownNat n $ Sized $ Seq.fromFunction (P.fromIntegral $ toNatural n) (f . toEnum)
+genSeq n f = withKnownNat n $ Sized $ Seq.fromFunction (P.fromIntegral $ fromSNat n) (f . toEnum)
 {-# INLINE genSeq #-}
 
 {-# RULES
@@ -731,7 +731,7 @@
   (n :: SNat (n :: Nat))
   (f :: UV.Unbox a => Ordinal n -> a).
   generate n f =
-    withKnownNat n $ Sized (UV.generate (P.fromIntegral $ toNatural n) (f . toEnum))
+    withKnownNat n $ Sized (UV.generate (P.fromIntegral $ fromSNat n) (f . toEnum))
 "generate/Seq" [~1] generate = genSeq
   #-}
 
@@ -1063,7 +1063,7 @@
   Maybe (Sized f n a)
 fromList Zero _ = Just $ Sized (mempty :: f a)
 fromList sn xs =
-  let len = P.fromIntegral $ toNatural sn
+  let len = P.fromIntegral $ fromSNat sn
    in if P.length xs < len
         then Nothing
         else Just $ Sized $ ctake len $ cfromList xs
@@ -1137,7 +1137,7 @@
   [a] ->
   Sized f n a
 fromListWithDefault sn def xs =
-  let len = P.fromIntegral $ toNatural sn
+  let len = P.fromIntegral $ fromSNat sn
    in Sized $
         cfromList (ctake len xs)
           <> creplicate (len - clength xs) def
@@ -1181,7 +1181,7 @@
   f a ->
   Maybe (Sized f n a)
 toSized sn xs =
-  let len = P.fromIntegral $ toNatural sn
+  let len = P.fromIntegral $ fromSNat sn
    in if clength xs < len
         then Nothing
         else Just $ unsafeToSized sn $ ctake len xs
@@ -1232,7 +1232,7 @@
   f a ->
   Sized f n a
 toSizedWithDefault sn def xs =
-  let len = P.fromIntegral $ toNatural sn
+  let len = P.fromIntegral $ fromSNat sn
    in Sized $ ctake len xs <> creplicate (len - clength xs) def
 {-# INLINEABLE toSizedWithDefault #-}
 
diff --git a/src/Data/Sized/Flipped.hs b/src/Data/Sized/Flipped.hs
--- a/src/Data/Sized/Flipped.hs
+++ b/src/Data/Sized/Flipped.hs
@@ -1,5 +1,5 @@
-{-# LANGUAGE CPP #-}
 {-# LANGUAGE ConstraintKinds #-}
+{-# LANGUAGE DataKinds #-}
 {-# LANGUAGE DeriveDataTypeable #-}
 {-# LANGUAGE DeriveTraversable #-}
 {-# LANGUAGE EmptyDataDecls #-}
@@ -9,19 +9,16 @@
 {-# LANGUAGE LiberalTypeSynonyms #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE PolyKinds #-}
 {-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE StandaloneDeriving #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE TypeInType #-}
 {-# LANGUAGE TypeOperators #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE ViewPatterns #-}
-
-#if __GLASGOW_HASKELL__ && __GLASGOW_HASKELL__ >= 806
 {-# LANGUAGE NoStarIsType #-}
-#endif
 module Data.Sized.Flipped (Flipped (..)) where
 
 import Control.DeepSeq (NFData (..))
diff --git a/src/Data/Sized/Internal.hs b/src/Data/Sized/Internal.hs
--- a/src/Data/Sized/Internal.hs
+++ b/src/Data/Sized/Internal.hs
@@ -1,13 +1,11 @@
-{-# LANGUAGE CPP, ConstraintKinds, DataKinds, DeriveDataTypeable           #-}
+{-# LANGUAGE ConstraintKinds, DataKinds, DeriveDataTypeable           #-}
 {-# LANGUAGE DeriveFunctor, DeriveTraversable, DerivingStrategies          #-}
 {-# LANGUAGE ExplicitNamespaces, FlexibleContexts, FlexibleInstances       #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving, KindSignatures                    #-}
 {-# LANGUAGE LiberalTypeSynonyms, MultiParamTypeClasses, PolyKinds         #-}
 {-# LANGUAGE RankNTypes, ScopedTypeVariables, StandaloneDeriving           #-}
-{-# LANGUAGE TypeFamilies, TypeInType, TypeOperators, UndecidableInstances #-}
-#if __GLASGOW_HASKELL__ && __GLASGOW_HASKELL__ >= 806
+{-# LANGUAGE TypeFamilies, DataKinds, PolyKinds, TypeOperators, UndecidableInstances #-}
 {-# LANGUAGE NoStarIsType #-}
-#endif
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 module Data.Sized.Internal (Sized(..)) where
 import           Control.DeepSeq      (NFData (..))
diff --git a/test/Shared.hs b/test/Shared.hs
--- a/test/Shared.hs
+++ b/test/Shared.hs
@@ -10,11 +10,13 @@
 inspecting :: String -> Obligation -> ExpQ
 inspecting title obl = inspectTest $ obl {testName = Just title}
 
-data GHCVer = GHC8_8 | GHC8_10 | GHC9_0 | GHC9_2 | GHC9_4
+data GHCVer = GHC8_8 | GHC8_10 | GHC9_0 | GHC9_2 | GHC9_4 | GHC9_6
   deriving (Show, Eq, Ord)
 
 ghcVer :: GHCVer
-#if __GLASGOW_HASKELL__ == 904
+#if __GLASGOW_HASKELL__ == 906
+ghcVer = GHC9_6
+#elif __GLASGOW_HASKELL__ == 904
 ghcVer = GHC9_4
 #elif __GLASGOW_HASKELL__ == 902
 ghcVer = GHC9_2
diff --git a/test/opt-test.hs b/test/opt-test.hs
--- a/test/opt-test.hs
+++ b/test/opt-test.hs
@@ -10,7 +10,6 @@
 module Main where
 
 import Control.Subcategory
-import Data.Function ((&))
 import qualified Data.Sequence as Seq
 import Data.Sized (Sized, zipWithSame)
 import qualified Data.Sized as SV
@@ -24,8 +23,9 @@
 import Numeric.Natural (Natural)
 import Shared
 import Test.Tasty
-import Test.Tasty.ExpectedFailure (expectFailBecause)
 import Test.Tasty.Inspection
+import qualified Data.Vector.Generic.Mutable as MV
+import Control.Monad.Primitive (PrimMonad)
 
 type LSized = Sized []
 
@@ -149,13 +149,17 @@
               ]
           , testGroup
               "Unboxed Vector"
-              [ $( inspecting "doesn't contain type classes except for Unbox" $
+              [ $( inspecting "doesn't contain type classes except for Unbox, and Vector, MVector (>= GHC 9)" $
                     'zipWithSame_Unboxed
-                      `hasNoTypeClassesExcept` [''Unbox]
+                      `hasNoTypeClassesExcept`
+                        if ghcVer >= GHC9_0 
+                          then 
+                            if ghcVer >= GHC9_6
+                            then [''Unbox, ''G.Vector, ''MV.MVector]
+                            else [''Unbox, ''G.Vector, ''MV.MVector, ''Monad, ''PrimMonad]
+                          else [''Unbox]
                  )
-                  & if ghcVer >= GHC9_0
-                    then expectFailBecause "This suffers from Simplified Subsumption"
-                    else id
+                 
               , $( inspecting "doesn't contain type classes if fully instnatiated" $
                     hasNoTypeClasses 'zipWithSame_Unboxed_monomorphic
                  )
