diff --git a/gpu-vulkan.cabal b/gpu-vulkan.cabal
--- a/gpu-vulkan.cabal
+++ b/gpu-vulkan.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           gpu-vulkan
-version:        0.1.0.168
+version:        0.1.0.169
 synopsis:       Vulkan library
 description:    Please see the README on GitHub at <https://github.com/YoshikuniJujo/gpu-vulkan#readme>
 category:       GPU
diff --git a/src/Gpu/Vulkan/CommandBuffer/Internal.hs b/src/Gpu/Vulkan/CommandBuffer/Internal.hs
--- a/src/Gpu/Vulkan/CommandBuffer/Internal.hs
+++ b/src/Gpu/Vulkan/CommandBuffer/Internal.hs
@@ -38,6 +38,7 @@
 import Data.TypeLevel.Tuple.Uncurry
 import Data.TypeLevel.Tuple.MapIndex qualified as TMapIndex
 import Data.TypeLevel.Maybe qualified as TMaybe
+import Data.TypeLevel.List qualified as TList
 import Data.TypeLevel.List qualified as TLength
 import Data.HeteroParList (pattern (:**))
 import Data.HeteroParList qualified as HPList
@@ -118,7 +119,10 @@
 	submitInfoCommandBuffer :: C sc,
 	submitInfoDeviceMask :: GDevice.Mask }
 
-class SubmitInfoListToMiddle mnscs where
+class (	TList.Length (TMapIndex.M0_2 mnscs),
+	HPList.ToListWithCCpsM' WithPoked TMaybe.M (TMapIndex.M0_2 mnscs)
+	) =>
+	SubmitInfoListToMiddle mnscs where
 	submitInfoListToMiddle ::
 		HPList.PL (U2 SubmitInfo) mnscs ->
 		HPList.PL M.SubmitInfo (TMapIndex.M0_2 mnscs)
@@ -126,7 +130,11 @@
 instance SubmitInfoListToMiddle '[] where
 	submitInfoListToMiddle HPList.Nil = HPList.Nil
 
-instance SubmitInfoListToMiddle mnscs =>
+instance (
+	TList.Length (TMapIndex.M0_2 (mnsc : mnscs)),
+	HPList.ToListWithCCpsM'
+		WithPoked TMaybe.M (TMapIndex.M0_2 (mnsc : mnscs)),
+	SubmitInfoListToMiddle mnscs ) =>
 	SubmitInfoListToMiddle (mnsc ': mnscs) where
 	submitInfoListToMiddle (U2 si :** sis) =
 		submitInfoToMiddle si :** submitInfoListToMiddle sis
diff --git a/src/Gpu/Vulkan/Internal.hs b/src/Gpu/Vulkan/Internal.hs
--- a/src/Gpu/Vulkan/Internal.hs
+++ b/src/Gpu/Vulkan/Internal.hs
@@ -101,7 +101,6 @@
 import Data.TypeLevel.Tuple.Uncurry
 import Data.TypeLevel.Tuple.MapIndex qualified as TMapIndex
 import Data.TypeLevel.Maybe qualified as TMaybe
-import Data.TypeLevel.List qualified as TList
 import Data.HeteroParList qualified as HeteroParList
 import Data.HeteroParList qualified as HPList
 import Data.HeteroParList (pattern (:**))
@@ -195,12 +194,6 @@
 
 instance (
 	WithPoked (TMaybe.M mn),
-	TList.Length (TMapIndex.M0_2 wsas),
-	TList.Length (TMapIndex.M0_2 cbas),
-	TList.Length (TMapIndex.M0_2 ssas),
-	HPList.ToListWithCCpsM' WithPoked TMaybe.M (TMapIndex.M0_2 wsas),
-	HPList.ToListWithCCpsM' WithPoked TMaybe.M (TMapIndex.M0_2 cbas),
-	HPList.ToListWithCCpsM' WithPoked TMaybe.M (TMapIndex.M0_2 ssas),
 	Semaphore.SubmitInfoListToMiddle wsas,
 	CommandBuffer.SubmitInfoListToMiddle cbas,
 	Semaphore.SubmitInfoListToMiddle ssas,
diff --git a/src/Gpu/Vulkan/Semaphore/Internal.hs b/src/Gpu/Vulkan/Semaphore/Internal.hs
--- a/src/Gpu/Vulkan/Semaphore/Internal.hs
+++ b/src/Gpu/Vulkan/Semaphore/Internal.hs
@@ -4,7 +4,7 @@
 {-# LANGUAGE MonoLocalBinds #-}
 {-# LANGUAGE DataKinds #-}
 {-# LANGUAGE TypeOperators #-}
-{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleContexts, UndecidableInstances #-}
 {-# LANGUAGE PatternSynonyms #-}
 {-# LANGUAGE ViewPatterns #-}
 {-# OPTIONS_GHC -Wall -fno-warn-tabs #-}
@@ -32,6 +32,7 @@
 import Control.Exception
 import Data.TypeLevel.Tuple.MapIndex qualified as TMapIndex
 import Data.TypeLevel.Maybe qualified as TMaybe
+import Data.TypeLevel.List qualified as TList
 import Data.TypeLevel.ParMaybe qualified as TPMaybe
 import Data.TypeLevel.Tuple.Uncurry
 import Data.HeteroParList (pattern (:**))
@@ -40,6 +41,7 @@
 import Data.Word
 
 import qualified Gpu.Vulkan.Device.Type as Device
+import Gpu.Vulkan.Device.GroupDevice qualified as GDevice
 import qualified Gpu.Vulkan.AllocationCallbacks as AllocationCallbacks
 import qualified Gpu.Vulkan.AllocationCallbacks.Type as AllocationCallbacks
 import qualified Gpu.Vulkan.Semaphore.Middle as M
@@ -112,9 +114,11 @@
 	submitInfoNext :: TMaybe.M mn,
 	submitInfoSemaphore :: S ss, submitInfoValue :: Word64,
 	submitInfoStageMask :: Pipeline.StageFlags2,
-	submitInfoDeviceIndex :: Word32 }
+	submitInfoDeviceIndex :: GDevice.Index }
 
-class SubmitInfoListToMiddle mnsss where
+class (	TList.Length (TMapIndex.M0_2 mnsss),
+	HPList.ToListWithCCpsM' WithPoked TMaybe.M (TMapIndex.M0_2 mnsss) ) =>
+	SubmitInfoListToMiddle mnsss where
 	submitInfoListToMiddle ::
 		HPList.PL (U2 SubmitInfo) mnsss ->
 		HPList.PL M.SubmitInfo (TMapIndex.M0_2 mnsss)
@@ -122,7 +126,10 @@
 instance SubmitInfoListToMiddle '[] where
 	submitInfoListToMiddle HPList.Nil = HPList.Nil
 
-instance SubmitInfoListToMiddle mnsss =>
+instance (
+	TList.Length (TMapIndex.M0_2 (mnss : mnsss)),
+	HPList.ToListWithCCpsM' WithPoked TMaybe.M (TMapIndex.M0_2 (mnss : mnsss)),
+	SubmitInfoListToMiddle mnsss ) =>
 	SubmitInfoListToMiddle (mnss ': mnsss) where
 	submitInfoListToMiddle (U2 si :** sis) =
 		submitInfoToMiddle si :** submitInfoListToMiddle sis
