diff --git a/cbits/vulkan_loader.c b/cbits/vulkan_loader.c
--- a/cbits/vulkan_loader.c
+++ b/cbits/vulkan_loader.c
@@ -12,7 +12,7 @@
 #else
   #include <dlfcn.h>
   #if defined(__APPLE__) || defined(darwin_HOST_OS)
-    #define _vk_dlopen() dlopen("libMoltenVK.dylib", RTLD_LAZY | RTLD_LOCAL)
+    #define _vk_dlopen() dlopen("libvulkan.1.dylib", RTLD_LAZY | RTLD_LOCAL)
   #else
     #define _vk_dlopen() dlopen("libvulkan.so", RTLD_LAZY | RTLD_LOCAL)
   #endif
diff --git a/src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc b/src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc
--- a/src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc
+++ b/src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc
@@ -258,63 +258,33 @@
         fieldOffset = #{offset VkClearColorValue, float32}
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx, IndexInBounds "float32" idx VkClearColorValue) =>
-         CanReadFieldArray "float32" idx VkClearColorValue
-         where
-        {-# SPECIALISE instance
-                       CanReadFieldArray "float32" 0 VkClearColorValue #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "float32" 1 VkClearColorValue #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "float32" 2 VkClearColorValue #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "float32" 3 VkClearColorValue #-}
+         CanReadFieldArray "float32" VkClearColorValue where
         type FieldArrayLength "float32" VkClearColorValue = 4
 
         {-# INLINE fieldArrayLength #-}
         fieldArrayLength = 4
 
-        {-# INLINE getFieldArray #-}
-        getFieldArray = f
+        {-# INLINE getFieldArrayUnsafe #-}
+        getFieldArrayUnsafe i = f
           where {-# NOINLINE f #-}
                 f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                 off
                   = #{offset VkClearColorValue, float32} +
-                      sizeOf (undefined :: #{type float}) *
-                        fromInteger (natVal' (proxy## :: Proxy## idx)) -- ' closing tick for hsc2hs
+                      sizeOf (undefined :: #{type float}) * i
 
-        {-# INLINE readFieldArray #-}
-        readFieldArray p
+        {-# INLINE readFieldArrayUnsafe #-}
+        readFieldArrayUnsafe i p
           = peekByteOff p
               (#{offset VkClearColorValue, float32} +
-                 sizeOf (undefined :: #{type float}) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: #{type float}) * i)
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx, IndexInBounds "float32" idx VkClearColorValue) =>
-         CanWriteFieldArray "float32" idx VkClearColorValue
-         where
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "float32" 0 VkClearColorValue #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "float32" 1 VkClearColorValue #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "float32" 2 VkClearColorValue #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "float32" 3 VkClearColorValue #-}
-
-        {-# INLINE writeFieldArray #-}
-        writeFieldArray p
+         CanWriteFieldArray "float32" VkClearColorValue where
+        {-# INLINE writeFieldArrayUnsafe #-}
+        writeFieldArrayUnsafe i p
           = pokeByteOff p
               (#{offset VkClearColorValue, float32} +
-                 sizeOf (undefined :: #{type float}) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: #{type float}) * i)
 
 instance {-# OVERLAPPING #-} HasField "int32" VkClearColorValue
          where
@@ -331,63 +301,33 @@
         fieldOffset = #{offset VkClearColorValue, int32}
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx, IndexInBounds "int32" idx VkClearColorValue) =>
-         CanReadFieldArray "int32" idx VkClearColorValue
-         where
-        {-# SPECIALISE instance
-                       CanReadFieldArray "int32" 0 VkClearColorValue #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "int32" 1 VkClearColorValue #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "int32" 2 VkClearColorValue #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "int32" 3 VkClearColorValue #-}
+         CanReadFieldArray "int32" VkClearColorValue where
         type FieldArrayLength "int32" VkClearColorValue = 4
 
         {-# INLINE fieldArrayLength #-}
         fieldArrayLength = 4
 
-        {-# INLINE getFieldArray #-}
-        getFieldArray = f
+        {-# INLINE getFieldArrayUnsafe #-}
+        getFieldArrayUnsafe i = f
           where {-# NOINLINE f #-}
                 f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                 off
                   = #{offset VkClearColorValue, int32} +
-                      sizeOf (undefined :: Int32) *
-                        fromInteger (natVal' (proxy## :: Proxy## idx)) -- ' closing tick for hsc2hs
+                      sizeOf (undefined :: Int32) * i
 
-        {-# INLINE readFieldArray #-}
-        readFieldArray p
+        {-# INLINE readFieldArrayUnsafe #-}
+        readFieldArrayUnsafe i p
           = peekByteOff p
               (#{offset VkClearColorValue, int32} +
-                 sizeOf (undefined :: Int32) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: Int32) * i)
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx, IndexInBounds "int32" idx VkClearColorValue) =>
-         CanWriteFieldArray "int32" idx VkClearColorValue
-         where
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "int32" 0 VkClearColorValue #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "int32" 1 VkClearColorValue #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "int32" 2 VkClearColorValue #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "int32" 3 VkClearColorValue #-}
-
-        {-# INLINE writeFieldArray #-}
-        writeFieldArray p
+         CanWriteFieldArray "int32" VkClearColorValue where
+        {-# INLINE writeFieldArrayUnsafe #-}
+        writeFieldArrayUnsafe i p
           = pokeByteOff p
               (#{offset VkClearColorValue, int32} +
-                 sizeOf (undefined :: Int32) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: Int32) * i)
 
 instance {-# OVERLAPPING #-} HasField "uint32" VkClearColorValue
          where
@@ -404,63 +344,33 @@
         fieldOffset = #{offset VkClearColorValue, uint32}
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx, IndexInBounds "uint32" idx VkClearColorValue) =>
-         CanReadFieldArray "uint32" idx VkClearColorValue
-         where
-        {-# SPECIALISE instance
-                       CanReadFieldArray "uint32" 0 VkClearColorValue #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "uint32" 1 VkClearColorValue #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "uint32" 2 VkClearColorValue #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "uint32" 3 VkClearColorValue #-}
+         CanReadFieldArray "uint32" VkClearColorValue where
         type FieldArrayLength "uint32" VkClearColorValue = 4
 
         {-# INLINE fieldArrayLength #-}
         fieldArrayLength = 4
 
-        {-# INLINE getFieldArray #-}
-        getFieldArray = f
+        {-# INLINE getFieldArrayUnsafe #-}
+        getFieldArrayUnsafe i = f
           where {-# NOINLINE f #-}
                 f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                 off
                   = #{offset VkClearColorValue, uint32} +
-                      sizeOf (undefined :: Word32) *
-                        fromInteger (natVal' (proxy## :: Proxy## idx)) -- ' closing tick for hsc2hs
+                      sizeOf (undefined :: Word32) * i
 
-        {-# INLINE readFieldArray #-}
-        readFieldArray p
+        {-# INLINE readFieldArrayUnsafe #-}
+        readFieldArrayUnsafe i p
           = peekByteOff p
               (#{offset VkClearColorValue, uint32} +
-                 sizeOf (undefined :: Word32) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: Word32) * i)
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx, IndexInBounds "uint32" idx VkClearColorValue) =>
-         CanWriteFieldArray "uint32" idx VkClearColorValue
-         where
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "uint32" 0 VkClearColorValue #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "uint32" 1 VkClearColorValue #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "uint32" 2 VkClearColorValue #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "uint32" 3 VkClearColorValue #-}
-
-        {-# INLINE writeFieldArray #-}
-        writeFieldArray p
+         CanWriteFieldArray "uint32" VkClearColorValue where
+        {-# INLINE writeFieldArrayUnsafe #-}
+        writeFieldArrayUnsafe i p
           = pokeByteOff p
               (#{offset VkClearColorValue, uint32} +
-                 sizeOf (undefined :: Word32) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: Word32) * i)
 
 instance Show VkClearColorValue where
         showsPrec d x
diff --git a/src-gen/Graphics/Vulkan/Types/Struct/Debug.hsc b/src-gen/Graphics/Vulkan/Types/Struct/Debug.hsc
--- a/src-gen/Graphics/Vulkan/Types/Struct/Debug.hsc
+++ b/src-gen/Graphics/Vulkan/Types/Struct/Debug.hsc
@@ -210,65 +210,33 @@
           = #{offset VkDebugMarkerMarkerInfoEXT, color}
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "color" idx VkDebugMarkerMarkerInfoEXT) =>
-         CanReadFieldArray "color" idx VkDebugMarkerMarkerInfoEXT
-         where
-        {-# SPECIALISE instance
-                       CanReadFieldArray "color" 0 VkDebugMarkerMarkerInfoEXT #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "color" 1 VkDebugMarkerMarkerInfoEXT #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "color" 2 VkDebugMarkerMarkerInfoEXT #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "color" 3 VkDebugMarkerMarkerInfoEXT #-}
+         CanReadFieldArray "color" VkDebugMarkerMarkerInfoEXT where
         type FieldArrayLength "color" VkDebugMarkerMarkerInfoEXT = 4
 
         {-# INLINE fieldArrayLength #-}
         fieldArrayLength = 4
 
-        {-# INLINE getFieldArray #-}
-        getFieldArray = f
+        {-# INLINE getFieldArrayUnsafe #-}
+        getFieldArrayUnsafe i = f
           where {-# NOINLINE f #-}
                 f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                 off
                   = #{offset VkDebugMarkerMarkerInfoEXT, color} +
-                      sizeOf (undefined :: #{type float}) *
-                        fromInteger (natVal' (proxy## :: Proxy## idx)) -- ' closing tick for hsc2hs
+                      sizeOf (undefined :: #{type float}) * i
 
-        {-# INLINE readFieldArray #-}
-        readFieldArray p
+        {-# INLINE readFieldArrayUnsafe #-}
+        readFieldArrayUnsafe i p
           = peekByteOff p
               (#{offset VkDebugMarkerMarkerInfoEXT, color} +
-                 sizeOf (undefined :: #{type float}) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: #{type float}) * i)
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "color" idx VkDebugMarkerMarkerInfoEXT) =>
-         CanWriteFieldArray "color" idx VkDebugMarkerMarkerInfoEXT
-         where
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "color" 0 VkDebugMarkerMarkerInfoEXT #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "color" 1 VkDebugMarkerMarkerInfoEXT #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "color" 2 VkDebugMarkerMarkerInfoEXT #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "color" 3 VkDebugMarkerMarkerInfoEXT #-}
-
-        {-# INLINE writeFieldArray #-}
-        writeFieldArray p
+         CanWriteFieldArray "color" VkDebugMarkerMarkerInfoEXT where
+        {-# INLINE writeFieldArrayUnsafe #-}
+        writeFieldArrayUnsafe i p
           = pokeByteOff p
               (#{offset VkDebugMarkerMarkerInfoEXT, color} +
-                 sizeOf (undefined :: #{type float}) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: #{type float}) * i)
 
 instance Show VkDebugMarkerMarkerInfoEXT where
         showsPrec d x
diff --git a/src-gen/Graphics/Vulkan/Types/Struct/DebugUtilsLabelEXT.hsc b/src-gen/Graphics/Vulkan/Types/Struct/DebugUtilsLabelEXT.hsc
--- a/src-gen/Graphics/Vulkan/Types/Struct/DebugUtilsLabelEXT.hsc
+++ b/src-gen/Graphics/Vulkan/Types/Struct/DebugUtilsLabelEXT.hsc
@@ -189,63 +189,33 @@
         fieldOffset = #{offset VkDebugUtilsLabelEXT, color}
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx, IndexInBounds "color" idx VkDebugUtilsLabelEXT) =>
-         CanReadFieldArray "color" idx VkDebugUtilsLabelEXT
-         where
-        {-# SPECIALISE instance
-                       CanReadFieldArray "color" 0 VkDebugUtilsLabelEXT #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "color" 1 VkDebugUtilsLabelEXT #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "color" 2 VkDebugUtilsLabelEXT #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "color" 3 VkDebugUtilsLabelEXT #-}
+         CanReadFieldArray "color" VkDebugUtilsLabelEXT where
         type FieldArrayLength "color" VkDebugUtilsLabelEXT = 4
 
         {-# INLINE fieldArrayLength #-}
         fieldArrayLength = 4
 
-        {-# INLINE getFieldArray #-}
-        getFieldArray = f
+        {-# INLINE getFieldArrayUnsafe #-}
+        getFieldArrayUnsafe i = f
           where {-# NOINLINE f #-}
                 f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                 off
                   = #{offset VkDebugUtilsLabelEXT, color} +
-                      sizeOf (undefined :: #{type float}) *
-                        fromInteger (natVal' (proxy## :: Proxy## idx)) -- ' closing tick for hsc2hs
+                      sizeOf (undefined :: #{type float}) * i
 
-        {-# INLINE readFieldArray #-}
-        readFieldArray p
+        {-# INLINE readFieldArrayUnsafe #-}
+        readFieldArrayUnsafe i p
           = peekByteOff p
               (#{offset VkDebugUtilsLabelEXT, color} +
-                 sizeOf (undefined :: #{type float}) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: #{type float}) * i)
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx, IndexInBounds "color" idx VkDebugUtilsLabelEXT) =>
-         CanWriteFieldArray "color" idx VkDebugUtilsLabelEXT
-         where
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "color" 0 VkDebugUtilsLabelEXT #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "color" 1 VkDebugUtilsLabelEXT #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "color" 2 VkDebugUtilsLabelEXT #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "color" 3 VkDebugUtilsLabelEXT #-}
-
-        {-# INLINE writeFieldArray #-}
-        writeFieldArray p
+         CanWriteFieldArray "color" VkDebugUtilsLabelEXT where
+        {-# INLINE writeFieldArrayUnsafe #-}
+        writeFieldArrayUnsafe i p
           = pokeByteOff p
               (#{offset VkDebugUtilsLabelEXT, color} +
-                 sizeOf (undefined :: #{type float}) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: #{type float}) * i)
 
 instance Show VkDebugUtilsLabelEXT where
         showsPrec d x
diff --git a/src-gen/Graphics/Vulkan/Types/Struct/Device.hsc b/src-gen/Graphics/Vulkan/Types/Struct/Device.hsc
--- a/src-gen/Graphics/Vulkan/Types/Struct/Device.hsc
+++ b/src-gen/Graphics/Vulkan/Types/Struct/Device.hsc
@@ -2030,31 +2030,8 @@
           = #{offset VkDeviceGroupPresentCapabilitiesKHR, presentMask}
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "presentMask" idx
-            VkDeviceGroupPresentCapabilitiesKHR) =>
-         CanReadFieldArray "presentMask" idx
-           VkDeviceGroupPresentCapabilitiesKHR
+         CanReadFieldArray "presentMask" VkDeviceGroupPresentCapabilitiesKHR
          where
-        {-# SPECIALISE instance
-                       CanReadFieldArray "presentMask" 0
-                         VkDeviceGroupPresentCapabilitiesKHR
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "presentMask" 1
-                         VkDeviceGroupPresentCapabilitiesKHR
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "presentMask" 2
-                         VkDeviceGroupPresentCapabilitiesKHR
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "presentMask" 3
-                         VkDeviceGroupPresentCapabilitiesKHR
-                       #-}
         type FieldArrayLength "presentMask"
                VkDeviceGroupPresentCapabilitiesKHR
              = VK_MAX_DEVICE_GROUP_SIZE
@@ -2062,58 +2039,29 @@
         {-# INLINE fieldArrayLength #-}
         fieldArrayLength = VK_MAX_DEVICE_GROUP_SIZE
 
-        {-# INLINE getFieldArray #-}
-        getFieldArray = f
+        {-# INLINE getFieldArrayUnsafe #-}
+        getFieldArrayUnsafe i = f
           where {-# NOINLINE f #-}
                 f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                 off
                   = #{offset VkDeviceGroupPresentCapabilitiesKHR, presentMask}
-                      +
-                      sizeOf (undefined :: Word32) *
-                        fromInteger (natVal' (proxy## :: Proxy## idx)) -- ' closing tick for hsc2hs
+                      + sizeOf (undefined :: Word32) * i
 
-        {-# INLINE readFieldArray #-}
-        readFieldArray p
+        {-# INLINE readFieldArrayUnsafe #-}
+        readFieldArrayUnsafe i p
           = peekByteOff p
               (#{offset VkDeviceGroupPresentCapabilitiesKHR, presentMask}
-                 +
-                 sizeOf (undefined :: Word32) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 + sizeOf (undefined :: Word32) * i)
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "presentMask" idx
-            VkDeviceGroupPresentCapabilitiesKHR) =>
-         CanWriteFieldArray "presentMask" idx
+         CanWriteFieldArray "presentMask"
            VkDeviceGroupPresentCapabilitiesKHR
          where
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "presentMask" 0
-                         VkDeviceGroupPresentCapabilitiesKHR
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "presentMask" 1
-                         VkDeviceGroupPresentCapabilitiesKHR
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "presentMask" 2
-                         VkDeviceGroupPresentCapabilitiesKHR
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "presentMask" 3
-                         VkDeviceGroupPresentCapabilitiesKHR
-                       #-}
-
-        {-# INLINE writeFieldArray #-}
-        writeFieldArray p
+        {-# INLINE writeFieldArrayUnsafe #-}
+        writeFieldArrayUnsafe i p
           = pokeByteOff p
               (#{offset VkDeviceGroupPresentCapabilitiesKHR, presentMask}
-                 +
-                 sizeOf (undefined :: Word32) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 + sizeOf (undefined :: Word32) * i)
 
 instance {-# OVERLAPPING #-}
          HasField "modes" VkDeviceGroupPresentCapabilitiesKHR where
diff --git a/src-gen/Graphics/Vulkan/Types/Struct/ExtensionProperties.hsc b/src-gen/Graphics/Vulkan/Types/Struct/ExtensionProperties.hsc
--- a/src-gen/Graphics/Vulkan/Types/Struct/ExtensionProperties.hsc
+++ b/src-gen/Graphics/Vulkan/Types/Struct/ExtensionProperties.hsc
@@ -93,66 +93,34 @@
           = #{offset VkExtensionProperties, extensionName}
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "extensionName" idx VkExtensionProperties) =>
-         CanReadFieldArray "extensionName" idx VkExtensionProperties
-         where
-        {-# SPECIALISE instance
-                       CanReadFieldArray "extensionName" 0 VkExtensionProperties #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "extensionName" 1 VkExtensionProperties #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "extensionName" 2 VkExtensionProperties #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "extensionName" 3 VkExtensionProperties #-}
+         CanReadFieldArray "extensionName" VkExtensionProperties where
         type FieldArrayLength "extensionName" VkExtensionProperties =
              VK_MAX_EXTENSION_NAME_SIZE
 
         {-# INLINE fieldArrayLength #-}
         fieldArrayLength = VK_MAX_EXTENSION_NAME_SIZE
 
-        {-# INLINE getFieldArray #-}
-        getFieldArray = f
+        {-# INLINE getFieldArrayUnsafe #-}
+        getFieldArrayUnsafe i = f
           where {-# NOINLINE f #-}
                 f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                 off
                   = #{offset VkExtensionProperties, extensionName} +
-                      sizeOf (undefined :: CChar) *
-                        fromInteger (natVal' (proxy## :: Proxy## idx)) -- ' closing tick for hsc2hs
+                      sizeOf (undefined :: CChar) * i
 
-        {-# INLINE readFieldArray #-}
-        readFieldArray p
+        {-# INLINE readFieldArrayUnsafe #-}
+        readFieldArrayUnsafe i p
           = peekByteOff p
               (#{offset VkExtensionProperties, extensionName} +
-                 sizeOf (undefined :: CChar) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: CChar) * i)
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "extensionName" idx VkExtensionProperties) =>
-         CanWriteFieldArray "extensionName" idx VkExtensionProperties
-         where
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "extensionName" 0 VkExtensionProperties #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "extensionName" 1 VkExtensionProperties #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "extensionName" 2 VkExtensionProperties #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "extensionName" 3 VkExtensionProperties #-}
-
-        {-# INLINE writeFieldArray #-}
-        writeFieldArray p
+         CanWriteFieldArray "extensionName" VkExtensionProperties where
+        {-# INLINE writeFieldArrayUnsafe #-}
+        writeFieldArrayUnsafe i p
           = pokeByteOff p
               (#{offset VkExtensionProperties, extensionName} +
-                 sizeOf (undefined :: CChar) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: CChar) * i)
 
 instance {-# OVERLAPPING #-}
          HasField "specVersion" VkExtensionProperties where
diff --git a/src-gen/Graphics/Vulkan/Types/Struct/Image.hsc b/src-gen/Graphics/Vulkan/Types/Struct/Image.hsc
--- a/src-gen/Graphics/Vulkan/Types/Struct/Image.hsc
+++ b/src-gen/Graphics/Vulkan/Types/Struct/Image.hsc
@@ -161,51 +161,33 @@
         fieldOffset = #{offset VkImageBlit, srcOffsets}
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx, IndexInBounds "srcOffsets" idx VkImageBlit) =>
-         CanReadFieldArray "srcOffsets" idx VkImageBlit
-         where
-        {-# SPECIALISE instance
-                       CanReadFieldArray "srcOffsets" 0 VkImageBlit #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "srcOffsets" 1 VkImageBlit #-}
+         CanReadFieldArray "srcOffsets" VkImageBlit where
         type FieldArrayLength "srcOffsets" VkImageBlit = 2
 
         {-# INLINE fieldArrayLength #-}
         fieldArrayLength = 2
 
-        {-# INLINE getFieldArray #-}
-        getFieldArray = f
+        {-# INLINE getFieldArrayUnsafe #-}
+        getFieldArrayUnsafe i = f
           where {-# NOINLINE f #-}
                 f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                 off
                   = #{offset VkImageBlit, srcOffsets} +
-                      sizeOf (undefined :: VkOffset3D) *
-                        fromInteger (natVal' (proxy## :: Proxy## idx)) -- ' closing tick for hsc2hs
+                      sizeOf (undefined :: VkOffset3D) * i
 
-        {-# INLINE readFieldArray #-}
-        readFieldArray p
+        {-# INLINE readFieldArrayUnsafe #-}
+        readFieldArrayUnsafe i p
           = peekByteOff p
               (#{offset VkImageBlit, srcOffsets} +
-                 sizeOf (undefined :: VkOffset3D) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: VkOffset3D) * i)
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx, IndexInBounds "srcOffsets" idx VkImageBlit) =>
-         CanWriteFieldArray "srcOffsets" idx VkImageBlit
-         where
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "srcOffsets" 0 VkImageBlit #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "srcOffsets" 1 VkImageBlit #-}
-
-        {-# INLINE writeFieldArray #-}
-        writeFieldArray p
+         CanWriteFieldArray "srcOffsets" VkImageBlit where
+        {-# INLINE writeFieldArrayUnsafe #-}
+        writeFieldArrayUnsafe i p
           = pokeByteOff p
               (#{offset VkImageBlit, srcOffsets} +
-                 sizeOf (undefined :: VkOffset3D) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: VkOffset3D) * i)
 
 instance {-# OVERLAPPING #-} HasField "dstSubresource" VkImageBlit
          where
@@ -254,51 +236,33 @@
         fieldOffset = #{offset VkImageBlit, dstOffsets}
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx, IndexInBounds "dstOffsets" idx VkImageBlit) =>
-         CanReadFieldArray "dstOffsets" idx VkImageBlit
-         where
-        {-# SPECIALISE instance
-                       CanReadFieldArray "dstOffsets" 0 VkImageBlit #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "dstOffsets" 1 VkImageBlit #-}
+         CanReadFieldArray "dstOffsets" VkImageBlit where
         type FieldArrayLength "dstOffsets" VkImageBlit = 2
 
         {-# INLINE fieldArrayLength #-}
         fieldArrayLength = 2
 
-        {-# INLINE getFieldArray #-}
-        getFieldArray = f
+        {-# INLINE getFieldArrayUnsafe #-}
+        getFieldArrayUnsafe i = f
           where {-# NOINLINE f #-}
                 f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                 off
                   = #{offset VkImageBlit, dstOffsets} +
-                      sizeOf (undefined :: VkOffset3D) *
-                        fromInteger (natVal' (proxy## :: Proxy## idx)) -- ' closing tick for hsc2hs
+                      sizeOf (undefined :: VkOffset3D) * i
 
-        {-# INLINE readFieldArray #-}
-        readFieldArray p
+        {-# INLINE readFieldArrayUnsafe #-}
+        readFieldArrayUnsafe i p
           = peekByteOff p
               (#{offset VkImageBlit, dstOffsets} +
-                 sizeOf (undefined :: VkOffset3D) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: VkOffset3D) * i)
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx, IndexInBounds "dstOffsets" idx VkImageBlit) =>
-         CanWriteFieldArray "dstOffsets" idx VkImageBlit
-         where
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "dstOffsets" 0 VkImageBlit #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "dstOffsets" 1 VkImageBlit #-}
-
-        {-# INLINE writeFieldArray #-}
-        writeFieldArray p
+         CanWriteFieldArray "dstOffsets" VkImageBlit where
+        {-# INLINE writeFieldArrayUnsafe #-}
+        writeFieldArrayUnsafe i p
           = pokeByteOff p
               (#{offset VkImageBlit, dstOffsets} +
-                 sizeOf (undefined :: VkOffset3D) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: VkOffset3D) * i)
 
 instance Show VkImageBlit where
         showsPrec d x
diff --git a/src-gen/Graphics/Vulkan/Types/Struct/LayerProperties.hsc b/src-gen/Graphics/Vulkan/Types/Struct/LayerProperties.hsc
--- a/src-gen/Graphics/Vulkan/Types/Struct/LayerProperties.hsc
+++ b/src-gen/Graphics/Vulkan/Types/Struct/LayerProperties.hsc
@@ -96,64 +96,34 @@
         fieldOffset = #{offset VkLayerProperties, layerName}
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx, IndexInBounds "layerName" idx VkLayerProperties) =>
-         CanReadFieldArray "layerName" idx VkLayerProperties
-         where
-        {-# SPECIALISE instance
-                       CanReadFieldArray "layerName" 0 VkLayerProperties #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "layerName" 1 VkLayerProperties #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "layerName" 2 VkLayerProperties #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "layerName" 3 VkLayerProperties #-}
+         CanReadFieldArray "layerName" VkLayerProperties where
         type FieldArrayLength "layerName" VkLayerProperties =
              VK_MAX_EXTENSION_NAME_SIZE
 
         {-# INLINE fieldArrayLength #-}
         fieldArrayLength = VK_MAX_EXTENSION_NAME_SIZE
 
-        {-# INLINE getFieldArray #-}
-        getFieldArray = f
+        {-# INLINE getFieldArrayUnsafe #-}
+        getFieldArrayUnsafe i = f
           where {-# NOINLINE f #-}
                 f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                 off
                   = #{offset VkLayerProperties, layerName} +
-                      sizeOf (undefined :: CChar) *
-                        fromInteger (natVal' (proxy## :: Proxy## idx)) -- ' closing tick for hsc2hs
+                      sizeOf (undefined :: CChar) * i
 
-        {-# INLINE readFieldArray #-}
-        readFieldArray p
+        {-# INLINE readFieldArrayUnsafe #-}
+        readFieldArrayUnsafe i p
           = peekByteOff p
               (#{offset VkLayerProperties, layerName} +
-                 sizeOf (undefined :: CChar) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: CChar) * i)
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx, IndexInBounds "layerName" idx VkLayerProperties) =>
-         CanWriteFieldArray "layerName" idx VkLayerProperties
-         where
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "layerName" 0 VkLayerProperties #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "layerName" 1 VkLayerProperties #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "layerName" 2 VkLayerProperties #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "layerName" 3 VkLayerProperties #-}
-
-        {-# INLINE writeFieldArray #-}
-        writeFieldArray p
+         CanWriteFieldArray "layerName" VkLayerProperties where
+        {-# INLINE writeFieldArrayUnsafe #-}
+        writeFieldArrayUnsafe i p
           = pokeByteOff p
               (#{offset VkLayerProperties, layerName} +
-                 sizeOf (undefined :: CChar) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: CChar) * i)
 
 instance {-# OVERLAPPING #-}
          HasField "specVersion" VkLayerProperties where
@@ -235,66 +205,34 @@
         fieldOffset = #{offset VkLayerProperties, description}
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "description" idx VkLayerProperties) =>
-         CanReadFieldArray "description" idx VkLayerProperties
-         where
-        {-# SPECIALISE instance
-                       CanReadFieldArray "description" 0 VkLayerProperties #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "description" 1 VkLayerProperties #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "description" 2 VkLayerProperties #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "description" 3 VkLayerProperties #-}
+         CanReadFieldArray "description" VkLayerProperties where
         type FieldArrayLength "description" VkLayerProperties =
              VK_MAX_DESCRIPTION_SIZE
 
         {-# INLINE fieldArrayLength #-}
         fieldArrayLength = VK_MAX_DESCRIPTION_SIZE
 
-        {-# INLINE getFieldArray #-}
-        getFieldArray = f
+        {-# INLINE getFieldArrayUnsafe #-}
+        getFieldArrayUnsafe i = f
           where {-# NOINLINE f #-}
                 f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                 off
                   = #{offset VkLayerProperties, description} +
-                      sizeOf (undefined :: CChar) *
-                        fromInteger (natVal' (proxy## :: Proxy## idx)) -- ' closing tick for hsc2hs
+                      sizeOf (undefined :: CChar) * i
 
-        {-# INLINE readFieldArray #-}
-        readFieldArray p
+        {-# INLINE readFieldArrayUnsafe #-}
+        readFieldArrayUnsafe i p
           = peekByteOff p
               (#{offset VkLayerProperties, description} +
-                 sizeOf (undefined :: CChar) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: CChar) * i)
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "description" idx VkLayerProperties) =>
-         CanWriteFieldArray "description" idx VkLayerProperties
-         where
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "description" 0 VkLayerProperties #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "description" 1 VkLayerProperties #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "description" 2 VkLayerProperties #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "description" 3 VkLayerProperties #-}
-
-        {-# INLINE writeFieldArray #-}
-        writeFieldArray p
+         CanWriteFieldArray "description" VkLayerProperties where
+        {-# INLINE writeFieldArrayUnsafe #-}
+        writeFieldArrayUnsafe i p
           = pokeByteOff p
               (#{offset VkLayerProperties, description} +
-                 sizeOf (undefined :: CChar) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: CChar) * i)
 
 instance Show VkLayerProperties where
         showsPrec d x
diff --git a/src-gen/Graphics/Vulkan/Types/Struct/PhysicalDevice.hsc b/src-gen/Graphics/Vulkan/Types/Struct/PhysicalDevice.hsc
--- a/src-gen/Graphics/Vulkan/Types/Struct/PhysicalDevice.hsc
+++ b/src-gen/Graphics/Vulkan/Types/Struct/PhysicalDevice.hsc
@@ -6346,31 +6346,8 @@
           = #{offset VkPhysicalDeviceGroupProperties, physicalDevices}
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "physicalDevices" idx
-            VkPhysicalDeviceGroupProperties) =>
-         CanReadFieldArray "physicalDevices" idx
-           VkPhysicalDeviceGroupProperties
+         CanReadFieldArray "physicalDevices" VkPhysicalDeviceGroupProperties
          where
-        {-# SPECIALISE instance
-                       CanReadFieldArray "physicalDevices" 0
-                         VkPhysicalDeviceGroupProperties
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "physicalDevices" 1
-                         VkPhysicalDeviceGroupProperties
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "physicalDevices" 2
-                         VkPhysicalDeviceGroupProperties
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "physicalDevices" 3
-                         VkPhysicalDeviceGroupProperties
-                       #-}
         type FieldArrayLength "physicalDevices"
                VkPhysicalDeviceGroupProperties
              = VK_MAX_DEVICE_GROUP_SIZE
@@ -6378,58 +6355,29 @@
         {-# INLINE fieldArrayLength #-}
         fieldArrayLength = VK_MAX_DEVICE_GROUP_SIZE
 
-        {-# INLINE getFieldArray #-}
-        getFieldArray = f
+        {-# INLINE getFieldArrayUnsafe #-}
+        getFieldArrayUnsafe i = f
           where {-# NOINLINE f #-}
                 f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                 off
                   = #{offset VkPhysicalDeviceGroupProperties, physicalDevices}
-                      +
-                      sizeOf (undefined :: VkPhysicalDevice) *
-                        fromInteger (natVal' (proxy## :: Proxy## idx)) -- ' closing tick for hsc2hs
+                      + sizeOf (undefined :: VkPhysicalDevice) * i
 
-        {-# INLINE readFieldArray #-}
-        readFieldArray p
+        {-# INLINE readFieldArrayUnsafe #-}
+        readFieldArrayUnsafe i p
           = peekByteOff p
               (#{offset VkPhysicalDeviceGroupProperties, physicalDevices}
-                 +
-                 sizeOf (undefined :: VkPhysicalDevice) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 + sizeOf (undefined :: VkPhysicalDevice) * i)
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "physicalDevices" idx
-            VkPhysicalDeviceGroupProperties) =>
-         CanWriteFieldArray "physicalDevices" idx
+         CanWriteFieldArray "physicalDevices"
            VkPhysicalDeviceGroupProperties
          where
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "physicalDevices" 0
-                         VkPhysicalDeviceGroupProperties
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "physicalDevices" 1
-                         VkPhysicalDeviceGroupProperties
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "physicalDevices" 2
-                         VkPhysicalDeviceGroupProperties
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "physicalDevices" 3
-                         VkPhysicalDeviceGroupProperties
-                       #-}
-
-        {-# INLINE writeFieldArray #-}
-        writeFieldArray p
+        {-# INLINE writeFieldArrayUnsafe #-}
+        writeFieldArrayUnsafe i p
           = pokeByteOff p
               (#{offset VkPhysicalDeviceGroupProperties, physicalDevices}
-                 +
-                 sizeOf (undefined :: VkPhysicalDevice) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 + sizeOf (undefined :: VkPhysicalDevice) * i)
 
 instance {-# OVERLAPPING #-}
          HasField "subsetAllocation" VkPhysicalDeviceGroupProperties where
@@ -6657,66 +6605,34 @@
           = #{offset VkPhysicalDeviceIDProperties, deviceUUID}
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "deviceUUID" idx VkPhysicalDeviceIDProperties) =>
-         CanReadFieldArray "deviceUUID" idx VkPhysicalDeviceIDProperties
-         where
-        {-# SPECIALISE instance
-                       CanReadFieldArray "deviceUUID" 0 VkPhysicalDeviceIDProperties #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "deviceUUID" 1 VkPhysicalDeviceIDProperties #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "deviceUUID" 2 VkPhysicalDeviceIDProperties #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "deviceUUID" 3 VkPhysicalDeviceIDProperties #-}
+         CanReadFieldArray "deviceUUID" VkPhysicalDeviceIDProperties where
         type FieldArrayLength "deviceUUID" VkPhysicalDeviceIDProperties =
              VK_UUID_SIZE
 
         {-# INLINE fieldArrayLength #-}
         fieldArrayLength = VK_UUID_SIZE
 
-        {-# INLINE getFieldArray #-}
-        getFieldArray = f
+        {-# INLINE getFieldArrayUnsafe #-}
+        getFieldArrayUnsafe i = f
           where {-# NOINLINE f #-}
                 f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                 off
                   = #{offset VkPhysicalDeviceIDProperties, deviceUUID} +
-                      sizeOf (undefined :: Word8) *
-                        fromInteger (natVal' (proxy## :: Proxy## idx)) -- ' closing tick for hsc2hs
+                      sizeOf (undefined :: Word8) * i
 
-        {-# INLINE readFieldArray #-}
-        readFieldArray p
+        {-# INLINE readFieldArrayUnsafe #-}
+        readFieldArrayUnsafe i p
           = peekByteOff p
               (#{offset VkPhysicalDeviceIDProperties, deviceUUID} +
-                 sizeOf (undefined :: Word8) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: Word8) * i)
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "deviceUUID" idx VkPhysicalDeviceIDProperties) =>
-         CanWriteFieldArray "deviceUUID" idx VkPhysicalDeviceIDProperties
-         where
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "deviceUUID" 0 VkPhysicalDeviceIDProperties #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "deviceUUID" 1 VkPhysicalDeviceIDProperties #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "deviceUUID" 2 VkPhysicalDeviceIDProperties #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "deviceUUID" 3 VkPhysicalDeviceIDProperties #-}
-
-        {-# INLINE writeFieldArray #-}
-        writeFieldArray p
+         CanWriteFieldArray "deviceUUID" VkPhysicalDeviceIDProperties where
+        {-# INLINE writeFieldArrayUnsafe #-}
+        writeFieldArrayUnsafe i p
           = pokeByteOff p
               (#{offset VkPhysicalDeviceIDProperties, deviceUUID} +
-                 sizeOf (undefined :: Word8) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: Word8) * i)
 
 instance {-# OVERLAPPING #-}
          HasField "driverUUID" VkPhysicalDeviceIDProperties where
@@ -6735,66 +6651,34 @@
           = #{offset VkPhysicalDeviceIDProperties, driverUUID}
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "driverUUID" idx VkPhysicalDeviceIDProperties) =>
-         CanReadFieldArray "driverUUID" idx VkPhysicalDeviceIDProperties
-         where
-        {-# SPECIALISE instance
-                       CanReadFieldArray "driverUUID" 0 VkPhysicalDeviceIDProperties #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "driverUUID" 1 VkPhysicalDeviceIDProperties #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "driverUUID" 2 VkPhysicalDeviceIDProperties #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "driverUUID" 3 VkPhysicalDeviceIDProperties #-}
+         CanReadFieldArray "driverUUID" VkPhysicalDeviceIDProperties where
         type FieldArrayLength "driverUUID" VkPhysicalDeviceIDProperties =
              VK_UUID_SIZE
 
         {-# INLINE fieldArrayLength #-}
         fieldArrayLength = VK_UUID_SIZE
 
-        {-# INLINE getFieldArray #-}
-        getFieldArray = f
+        {-# INLINE getFieldArrayUnsafe #-}
+        getFieldArrayUnsafe i = f
           where {-# NOINLINE f #-}
                 f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                 off
                   = #{offset VkPhysicalDeviceIDProperties, driverUUID} +
-                      sizeOf (undefined :: Word8) *
-                        fromInteger (natVal' (proxy## :: Proxy## idx)) -- ' closing tick for hsc2hs
+                      sizeOf (undefined :: Word8) * i
 
-        {-# INLINE readFieldArray #-}
-        readFieldArray p
+        {-# INLINE readFieldArrayUnsafe #-}
+        readFieldArrayUnsafe i p
           = peekByteOff p
               (#{offset VkPhysicalDeviceIDProperties, driverUUID} +
-                 sizeOf (undefined :: Word8) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: Word8) * i)
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "driverUUID" idx VkPhysicalDeviceIDProperties) =>
-         CanWriteFieldArray "driverUUID" idx VkPhysicalDeviceIDProperties
-         where
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "driverUUID" 0 VkPhysicalDeviceIDProperties #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "driverUUID" 1 VkPhysicalDeviceIDProperties #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "driverUUID" 2 VkPhysicalDeviceIDProperties #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "driverUUID" 3 VkPhysicalDeviceIDProperties #-}
-
-        {-# INLINE writeFieldArray #-}
-        writeFieldArray p
+         CanWriteFieldArray "driverUUID" VkPhysicalDeviceIDProperties where
+        {-# INLINE writeFieldArrayUnsafe #-}
+        writeFieldArrayUnsafe i p
           = pokeByteOff p
               (#{offset VkPhysicalDeviceIDProperties, driverUUID} +
-                 sizeOf (undefined :: Word8) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: Word8) * i)
 
 instance {-# OVERLAPPING #-}
          HasField "deviceLUID" VkPhysicalDeviceIDProperties where
@@ -6813,66 +6697,34 @@
           = #{offset VkPhysicalDeviceIDProperties, deviceLUID}
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "deviceLUID" idx VkPhysicalDeviceIDProperties) =>
-         CanReadFieldArray "deviceLUID" idx VkPhysicalDeviceIDProperties
-         where
-        {-# SPECIALISE instance
-                       CanReadFieldArray "deviceLUID" 0 VkPhysicalDeviceIDProperties #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "deviceLUID" 1 VkPhysicalDeviceIDProperties #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "deviceLUID" 2 VkPhysicalDeviceIDProperties #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "deviceLUID" 3 VkPhysicalDeviceIDProperties #-}
+         CanReadFieldArray "deviceLUID" VkPhysicalDeviceIDProperties where
         type FieldArrayLength "deviceLUID" VkPhysicalDeviceIDProperties =
              VK_LUID_SIZE
 
         {-# INLINE fieldArrayLength #-}
         fieldArrayLength = VK_LUID_SIZE
 
-        {-# INLINE getFieldArray #-}
-        getFieldArray = f
+        {-# INLINE getFieldArrayUnsafe #-}
+        getFieldArrayUnsafe i = f
           where {-# NOINLINE f #-}
                 f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                 off
                   = #{offset VkPhysicalDeviceIDProperties, deviceLUID} +
-                      sizeOf (undefined :: Word8) *
-                        fromInteger (natVal' (proxy## :: Proxy## idx)) -- ' closing tick for hsc2hs
+                      sizeOf (undefined :: Word8) * i
 
-        {-# INLINE readFieldArray #-}
-        readFieldArray p
+        {-# INLINE readFieldArrayUnsafe #-}
+        readFieldArrayUnsafe i p
           = peekByteOff p
               (#{offset VkPhysicalDeviceIDProperties, deviceLUID} +
-                 sizeOf (undefined :: Word8) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: Word8) * i)
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "deviceLUID" idx VkPhysicalDeviceIDProperties) =>
-         CanWriteFieldArray "deviceLUID" idx VkPhysicalDeviceIDProperties
-         where
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "deviceLUID" 0 VkPhysicalDeviceIDProperties #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "deviceLUID" 1 VkPhysicalDeviceIDProperties #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "deviceLUID" 2 VkPhysicalDeviceIDProperties #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "deviceLUID" 3 VkPhysicalDeviceIDProperties #-}
-
-        {-# INLINE writeFieldArray #-}
-        writeFieldArray p
+         CanWriteFieldArray "deviceLUID" VkPhysicalDeviceIDProperties where
+        {-# INLINE writeFieldArrayUnsafe #-}
+        writeFieldArrayUnsafe i p
           = pokeByteOff p
               (#{offset VkPhysicalDeviceIDProperties, deviceLUID} +
-                 sizeOf (undefined :: Word8) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: Word8) * i)
 
 instance {-# OVERLAPPING #-}
          HasField "deviceNodeMask" VkPhysicalDeviceIDProperties where
@@ -9727,26 +9579,8 @@
           = #{offset VkPhysicalDeviceLimits, maxComputeWorkGroupCount}
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "maxComputeWorkGroupCount" idx
-            VkPhysicalDeviceLimits) =>
-         CanReadFieldArray "maxComputeWorkGroupCount" idx
-           VkPhysicalDeviceLimits
+         CanReadFieldArray "maxComputeWorkGroupCount" VkPhysicalDeviceLimits
          where
-        {-# SPECIALISE instance
-                       CanReadFieldArray "maxComputeWorkGroupCount" 0
-                         VkPhysicalDeviceLimits
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "maxComputeWorkGroupCount" 1
-                         VkPhysicalDeviceLimits
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "maxComputeWorkGroupCount" 2
-                         VkPhysicalDeviceLimits
-                       #-}
         type FieldArrayLength "maxComputeWorkGroupCount"
                VkPhysicalDeviceLimits
              = 3
@@ -9754,53 +9588,29 @@
         {-# INLINE fieldArrayLength #-}
         fieldArrayLength = 3
 
-        {-# INLINE getFieldArray #-}
-        getFieldArray = f
+        {-# INLINE getFieldArrayUnsafe #-}
+        getFieldArrayUnsafe i = f
           where {-# NOINLINE f #-}
                 f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                 off
                   = #{offset VkPhysicalDeviceLimits, maxComputeWorkGroupCount}
-                      +
-                      sizeOf (undefined :: Word32) *
-                        fromInteger (natVal' (proxy## :: Proxy## idx)) -- ' closing tick for hsc2hs
+                      + sizeOf (undefined :: Word32) * i
 
-        {-# INLINE readFieldArray #-}
-        readFieldArray p
+        {-# INLINE readFieldArrayUnsafe #-}
+        readFieldArrayUnsafe i p
           = peekByteOff p
               (#{offset VkPhysicalDeviceLimits, maxComputeWorkGroupCount}
-                 +
-                 sizeOf (undefined :: Word32) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 + sizeOf (undefined :: Word32) * i)
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "maxComputeWorkGroupCount" idx
-            VkPhysicalDeviceLimits) =>
-         CanWriteFieldArray "maxComputeWorkGroupCount" idx
+         CanWriteFieldArray "maxComputeWorkGroupCount"
            VkPhysicalDeviceLimits
          where
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "maxComputeWorkGroupCount" 0
-                         VkPhysicalDeviceLimits
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "maxComputeWorkGroupCount" 1
-                         VkPhysicalDeviceLimits
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "maxComputeWorkGroupCount" 2
-                         VkPhysicalDeviceLimits
-                       #-}
-
-        {-# INLINE writeFieldArray #-}
-        writeFieldArray p
+        {-# INLINE writeFieldArrayUnsafe #-}
+        writeFieldArrayUnsafe i p
           = pokeByteOff p
               (#{offset VkPhysicalDeviceLimits, maxComputeWorkGroupCount}
-                 +
-                 sizeOf (undefined :: Word32) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 + sizeOf (undefined :: Word32) * i)
 
 instance {-# OVERLAPPING #-}
          HasField "maxComputeWorkGroupInvocations" VkPhysicalDeviceLimits
@@ -9866,26 +9676,8 @@
           = #{offset VkPhysicalDeviceLimits, maxComputeWorkGroupSize}
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "maxComputeWorkGroupSize" idx
-            VkPhysicalDeviceLimits) =>
-         CanReadFieldArray "maxComputeWorkGroupSize" idx
-           VkPhysicalDeviceLimits
+         CanReadFieldArray "maxComputeWorkGroupSize" VkPhysicalDeviceLimits
          where
-        {-# SPECIALISE instance
-                       CanReadFieldArray "maxComputeWorkGroupSize" 0
-                         VkPhysicalDeviceLimits
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "maxComputeWorkGroupSize" 1
-                         VkPhysicalDeviceLimits
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "maxComputeWorkGroupSize" 2
-                         VkPhysicalDeviceLimits
-                       #-}
         type FieldArrayLength "maxComputeWorkGroupSize"
                VkPhysicalDeviceLimits
              = 3
@@ -9893,53 +9685,28 @@
         {-# INLINE fieldArrayLength #-}
         fieldArrayLength = 3
 
-        {-# INLINE getFieldArray #-}
-        getFieldArray = f
+        {-# INLINE getFieldArrayUnsafe #-}
+        getFieldArrayUnsafe i = f
           where {-# NOINLINE f #-}
                 f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                 off
                   = #{offset VkPhysicalDeviceLimits, maxComputeWorkGroupSize}
-                      +
-                      sizeOf (undefined :: Word32) *
-                        fromInteger (natVal' (proxy## :: Proxy## idx)) -- ' closing tick for hsc2hs
+                      + sizeOf (undefined :: Word32) * i
 
-        {-# INLINE readFieldArray #-}
-        readFieldArray p
+        {-# INLINE readFieldArrayUnsafe #-}
+        readFieldArrayUnsafe i p
           = peekByteOff p
               (#{offset VkPhysicalDeviceLimits, maxComputeWorkGroupSize}
-                 +
-                 sizeOf (undefined :: Word32) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 + sizeOf (undefined :: Word32) * i)
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "maxComputeWorkGroupSize" idx
-            VkPhysicalDeviceLimits) =>
-         CanWriteFieldArray "maxComputeWorkGroupSize" idx
-           VkPhysicalDeviceLimits
+         CanWriteFieldArray "maxComputeWorkGroupSize" VkPhysicalDeviceLimits
          where
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "maxComputeWorkGroupSize" 0
-                         VkPhysicalDeviceLimits
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "maxComputeWorkGroupSize" 1
-                         VkPhysicalDeviceLimits
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "maxComputeWorkGroupSize" 2
-                         VkPhysicalDeviceLimits
-                       #-}
-
-        {-# INLINE writeFieldArray #-}
-        writeFieldArray p
+        {-# INLINE writeFieldArrayUnsafe #-}
+        writeFieldArrayUnsafe i p
           = pokeByteOff p
               (#{offset VkPhysicalDeviceLimits, maxComputeWorkGroupSize}
-                 +
-                 sizeOf (undefined :: Word32) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 + sizeOf (undefined :: Word32) * i)
 
 instance {-# OVERLAPPING #-}
          HasField "subPixelPrecisionBits" VkPhysicalDeviceLimits where
@@ -10241,19 +10008,8 @@
           = #{offset VkPhysicalDeviceLimits, maxViewportDimensions}
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "maxViewportDimensions" idx
-            VkPhysicalDeviceLimits) =>
-         CanReadFieldArray "maxViewportDimensions" idx
-           VkPhysicalDeviceLimits
+         CanReadFieldArray "maxViewportDimensions" VkPhysicalDeviceLimits
          where
-        {-# SPECIALISE instance
-                       CanReadFieldArray "maxViewportDimensions" 0 VkPhysicalDeviceLimits
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "maxViewportDimensions" 1 VkPhysicalDeviceLimits
-                       #-}
         type FieldArrayLength "maxViewportDimensions"
                VkPhysicalDeviceLimits
              = 2
@@ -10261,46 +10017,28 @@
         {-# INLINE fieldArrayLength #-}
         fieldArrayLength = 2
 
-        {-# INLINE getFieldArray #-}
-        getFieldArray = f
+        {-# INLINE getFieldArrayUnsafe #-}
+        getFieldArrayUnsafe i = f
           where {-# NOINLINE f #-}
                 f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                 off
                   = #{offset VkPhysicalDeviceLimits, maxViewportDimensions}
-                      +
-                      sizeOf (undefined :: Word32) *
-                        fromInteger (natVal' (proxy## :: Proxy## idx)) -- ' closing tick for hsc2hs
+                      + sizeOf (undefined :: Word32) * i
 
-        {-# INLINE readFieldArray #-}
-        readFieldArray p
+        {-# INLINE readFieldArrayUnsafe #-}
+        readFieldArrayUnsafe i p
           = peekByteOff p
               (#{offset VkPhysicalDeviceLimits, maxViewportDimensions}
-                 +
-                 sizeOf (undefined :: Word32) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 + sizeOf (undefined :: Word32) * i)
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "maxViewportDimensions" idx
-            VkPhysicalDeviceLimits) =>
-         CanWriteFieldArray "maxViewportDimensions" idx
-           VkPhysicalDeviceLimits
+         CanWriteFieldArray "maxViewportDimensions" VkPhysicalDeviceLimits
          where
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "maxViewportDimensions" 0 VkPhysicalDeviceLimits
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "maxViewportDimensions" 1 VkPhysicalDeviceLimits
-                       #-}
-
-        {-# INLINE writeFieldArray #-}
-        writeFieldArray p
+        {-# INLINE writeFieldArrayUnsafe #-}
+        writeFieldArrayUnsafe i p
           = pokeByteOff p
               (#{offset VkPhysicalDeviceLimits, maxViewportDimensions}
-                 +
-                 sizeOf (undefined :: Word32) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 + sizeOf (undefined :: Word32) * i)
 
 instance {-# OVERLAPPING #-}
          HasField "viewportBoundsRange" VkPhysicalDeviceLimits where
@@ -10321,61 +10059,36 @@
           = #{offset VkPhysicalDeviceLimits, viewportBoundsRange}
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "viewportBoundsRange" idx VkPhysicalDeviceLimits) =>
-         CanReadFieldArray "viewportBoundsRange" idx VkPhysicalDeviceLimits
+         CanReadFieldArray "viewportBoundsRange" VkPhysicalDeviceLimits
          where
-        {-# SPECIALISE instance
-                       CanReadFieldArray "viewportBoundsRange" 0 VkPhysicalDeviceLimits
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "viewportBoundsRange" 1 VkPhysicalDeviceLimits
-                       #-}
         type FieldArrayLength "viewportBoundsRange" VkPhysicalDeviceLimits
              = 2
 
         {-# INLINE fieldArrayLength #-}
         fieldArrayLength = 2
 
-        {-# INLINE getFieldArray #-}
-        getFieldArray = f
+        {-# INLINE getFieldArrayUnsafe #-}
+        getFieldArrayUnsafe i = f
           where {-# NOINLINE f #-}
                 f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                 off
                   = #{offset VkPhysicalDeviceLimits, viewportBoundsRange}
-                      +
-                      sizeOf (undefined :: #{type float}) *
-                        fromInteger (natVal' (proxy## :: Proxy## idx)) -- ' closing tick for hsc2hs
+                      + sizeOf (undefined :: #{type float}) * i
 
-        {-# INLINE readFieldArray #-}
-        readFieldArray p
+        {-# INLINE readFieldArrayUnsafe #-}
+        readFieldArrayUnsafe i p
           = peekByteOff p
               (#{offset VkPhysicalDeviceLimits, viewportBoundsRange}
-                 +
-                 sizeOf (undefined :: #{type float}) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 + sizeOf (undefined :: #{type float}) * i)
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "viewportBoundsRange" idx VkPhysicalDeviceLimits) =>
-         CanWriteFieldArray "viewportBoundsRange" idx VkPhysicalDeviceLimits
+         CanWriteFieldArray "viewportBoundsRange" VkPhysicalDeviceLimits
          where
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "viewportBoundsRange" 0 VkPhysicalDeviceLimits
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "viewportBoundsRange" 1 VkPhysicalDeviceLimits
-                       #-}
-
-        {-# INLINE writeFieldArray #-}
-        writeFieldArray p
+        {-# INLINE writeFieldArrayUnsafe #-}
+        writeFieldArrayUnsafe i p
           = pokeByteOff p
               (#{offset VkPhysicalDeviceLimits, viewportBoundsRange}
-                 +
-                 sizeOf (undefined :: #{type float}) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 + sizeOf (undefined :: #{type float}) * i)
 
 instance {-# OVERLAPPING #-}
          HasField "viewportSubPixelBits" VkPhysicalDeviceLimits where
@@ -11639,53 +11352,33 @@
           = #{offset VkPhysicalDeviceLimits, pointSizeRange}
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "pointSizeRange" idx VkPhysicalDeviceLimits) =>
-         CanReadFieldArray "pointSizeRange" idx VkPhysicalDeviceLimits
-         where
-        {-# SPECIALISE instance
-                       CanReadFieldArray "pointSizeRange" 0 VkPhysicalDeviceLimits #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "pointSizeRange" 1 VkPhysicalDeviceLimits #-}
+         CanReadFieldArray "pointSizeRange" VkPhysicalDeviceLimits where
         type FieldArrayLength "pointSizeRange" VkPhysicalDeviceLimits = 2
 
         {-# INLINE fieldArrayLength #-}
         fieldArrayLength = 2
 
-        {-# INLINE getFieldArray #-}
-        getFieldArray = f
+        {-# INLINE getFieldArrayUnsafe #-}
+        getFieldArrayUnsafe i = f
           where {-# NOINLINE f #-}
                 f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                 off
                   = #{offset VkPhysicalDeviceLimits, pointSizeRange} +
-                      sizeOf (undefined :: #{type float}) *
-                        fromInteger (natVal' (proxy## :: Proxy## idx)) -- ' closing tick for hsc2hs
+                      sizeOf (undefined :: #{type float}) * i
 
-        {-# INLINE readFieldArray #-}
-        readFieldArray p
+        {-# INLINE readFieldArrayUnsafe #-}
+        readFieldArrayUnsafe i p
           = peekByteOff p
               (#{offset VkPhysicalDeviceLimits, pointSizeRange} +
-                 sizeOf (undefined :: #{type float}) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: #{type float}) * i)
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "pointSizeRange" idx VkPhysicalDeviceLimits) =>
-         CanWriteFieldArray "pointSizeRange" idx VkPhysicalDeviceLimits
-         where
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "pointSizeRange" 0 VkPhysicalDeviceLimits #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "pointSizeRange" 1 VkPhysicalDeviceLimits #-}
-
-        {-# INLINE writeFieldArray #-}
-        writeFieldArray p
+         CanWriteFieldArray "pointSizeRange" VkPhysicalDeviceLimits where
+        {-# INLINE writeFieldArrayUnsafe #-}
+        writeFieldArrayUnsafe i p
           = pokeByteOff p
               (#{offset VkPhysicalDeviceLimits, pointSizeRange} +
-                 sizeOf (undefined :: #{type float}) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: #{type float}) * i)
 
 instance {-# OVERLAPPING #-}
          HasField "lineWidthRange" VkPhysicalDeviceLimits where
@@ -11704,53 +11397,33 @@
           = #{offset VkPhysicalDeviceLimits, lineWidthRange}
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "lineWidthRange" idx VkPhysicalDeviceLimits) =>
-         CanReadFieldArray "lineWidthRange" idx VkPhysicalDeviceLimits
-         where
-        {-# SPECIALISE instance
-                       CanReadFieldArray "lineWidthRange" 0 VkPhysicalDeviceLimits #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "lineWidthRange" 1 VkPhysicalDeviceLimits #-}
+         CanReadFieldArray "lineWidthRange" VkPhysicalDeviceLimits where
         type FieldArrayLength "lineWidthRange" VkPhysicalDeviceLimits = 2
 
         {-# INLINE fieldArrayLength #-}
         fieldArrayLength = 2
 
-        {-# INLINE getFieldArray #-}
-        getFieldArray = f
+        {-# INLINE getFieldArrayUnsafe #-}
+        getFieldArrayUnsafe i = f
           where {-# NOINLINE f #-}
                 f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                 off
                   = #{offset VkPhysicalDeviceLimits, lineWidthRange} +
-                      sizeOf (undefined :: #{type float}) *
-                        fromInteger (natVal' (proxy## :: Proxy## idx)) -- ' closing tick for hsc2hs
+                      sizeOf (undefined :: #{type float}) * i
 
-        {-# INLINE readFieldArray #-}
-        readFieldArray p
+        {-# INLINE readFieldArrayUnsafe #-}
+        readFieldArrayUnsafe i p
           = peekByteOff p
               (#{offset VkPhysicalDeviceLimits, lineWidthRange} +
-                 sizeOf (undefined :: #{type float}) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: #{type float}) * i)
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "lineWidthRange" idx VkPhysicalDeviceLimits) =>
-         CanWriteFieldArray "lineWidthRange" idx VkPhysicalDeviceLimits
-         where
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "lineWidthRange" 0 VkPhysicalDeviceLimits #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "lineWidthRange" 1 VkPhysicalDeviceLimits #-}
-
-        {-# INLINE writeFieldArray #-}
-        writeFieldArray p
+         CanWriteFieldArray "lineWidthRange" VkPhysicalDeviceLimits where
+        {-# INLINE writeFieldArrayUnsafe #-}
+        writeFieldArrayUnsafe i p
           = pokeByteOff p
               (#{offset VkPhysicalDeviceLimits, lineWidthRange} +
-                 sizeOf (undefined :: #{type float}) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: #{type float}) * i)
 
 instance {-# OVERLAPPING #-}
          HasField "pointSizeGranularity" VkPhysicalDeviceLimits where
@@ -13785,27 +13458,8 @@
           = #{offset VkPhysicalDeviceMemoryProperties, memoryTypes}
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "memoryTypes" idx
-            VkPhysicalDeviceMemoryProperties) =>
-         CanReadFieldArray "memoryTypes" idx
-           VkPhysicalDeviceMemoryProperties
+         CanReadFieldArray "memoryTypes" VkPhysicalDeviceMemoryProperties
          where
-        {-# SPECIALISE instance
-                       CanReadFieldArray "memoryTypes" 0 VkPhysicalDeviceMemoryProperties
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "memoryTypes" 1 VkPhysicalDeviceMemoryProperties
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "memoryTypes" 2 VkPhysicalDeviceMemoryProperties
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "memoryTypes" 3 VkPhysicalDeviceMemoryProperties
-                       #-}
         type FieldArrayLength "memoryTypes"
                VkPhysicalDeviceMemoryProperties
              = VK_MAX_MEMORY_TYPES
@@ -13813,54 +13467,28 @@
         {-# INLINE fieldArrayLength #-}
         fieldArrayLength = VK_MAX_MEMORY_TYPES
 
-        {-# INLINE getFieldArray #-}
-        getFieldArray = f
+        {-# INLINE getFieldArrayUnsafe #-}
+        getFieldArrayUnsafe i = f
           where {-# NOINLINE f #-}
                 f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                 off
                   = #{offset VkPhysicalDeviceMemoryProperties, memoryTypes}
-                      +
-                      sizeOf (undefined :: VkMemoryType) *
-                        fromInteger (natVal' (proxy## :: Proxy## idx)) -- ' closing tick for hsc2hs
+                      + sizeOf (undefined :: VkMemoryType) * i
 
-        {-# INLINE readFieldArray #-}
-        readFieldArray p
+        {-# INLINE readFieldArrayUnsafe #-}
+        readFieldArrayUnsafe i p
           = peekByteOff p
               (#{offset VkPhysicalDeviceMemoryProperties, memoryTypes}
-                 +
-                 sizeOf (undefined :: VkMemoryType) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 + sizeOf (undefined :: VkMemoryType) * i)
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "memoryTypes" idx
-            VkPhysicalDeviceMemoryProperties) =>
-         CanWriteFieldArray "memoryTypes" idx
-           VkPhysicalDeviceMemoryProperties
+         CanWriteFieldArray "memoryTypes" VkPhysicalDeviceMemoryProperties
          where
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "memoryTypes" 0 VkPhysicalDeviceMemoryProperties
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "memoryTypes" 1 VkPhysicalDeviceMemoryProperties
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "memoryTypes" 2 VkPhysicalDeviceMemoryProperties
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "memoryTypes" 3 VkPhysicalDeviceMemoryProperties
-                       #-}
-
-        {-# INLINE writeFieldArray #-}
-        writeFieldArray p
+        {-# INLINE writeFieldArrayUnsafe #-}
+        writeFieldArrayUnsafe i p
           = pokeByteOff p
               (#{offset VkPhysicalDeviceMemoryProperties, memoryTypes}
-                 +
-                 sizeOf (undefined :: VkMemoryType) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 + sizeOf (undefined :: VkMemoryType) * i)
 
 instance {-# OVERLAPPING #-}
          HasField "memoryHeapCount" VkPhysicalDeviceMemoryProperties where
@@ -13921,27 +13549,8 @@
           = #{offset VkPhysicalDeviceMemoryProperties, memoryHeaps}
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "memoryHeaps" idx
-            VkPhysicalDeviceMemoryProperties) =>
-         CanReadFieldArray "memoryHeaps" idx
-           VkPhysicalDeviceMemoryProperties
+         CanReadFieldArray "memoryHeaps" VkPhysicalDeviceMemoryProperties
          where
-        {-# SPECIALISE instance
-                       CanReadFieldArray "memoryHeaps" 0 VkPhysicalDeviceMemoryProperties
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "memoryHeaps" 1 VkPhysicalDeviceMemoryProperties
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "memoryHeaps" 2 VkPhysicalDeviceMemoryProperties
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "memoryHeaps" 3 VkPhysicalDeviceMemoryProperties
-                       #-}
         type FieldArrayLength "memoryHeaps"
                VkPhysicalDeviceMemoryProperties
              = VK_MAX_MEMORY_HEAPS
@@ -13949,54 +13558,28 @@
         {-# INLINE fieldArrayLength #-}
         fieldArrayLength = VK_MAX_MEMORY_HEAPS
 
-        {-# INLINE getFieldArray #-}
-        getFieldArray = f
+        {-# INLINE getFieldArrayUnsafe #-}
+        getFieldArrayUnsafe i = f
           where {-# NOINLINE f #-}
                 f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                 off
                   = #{offset VkPhysicalDeviceMemoryProperties, memoryHeaps}
-                      +
-                      sizeOf (undefined :: VkMemoryHeap) *
-                        fromInteger (natVal' (proxy## :: Proxy## idx)) -- ' closing tick for hsc2hs
+                      + sizeOf (undefined :: VkMemoryHeap) * i
 
-        {-# INLINE readFieldArray #-}
-        readFieldArray p
+        {-# INLINE readFieldArrayUnsafe #-}
+        readFieldArrayUnsafe i p
           = peekByteOff p
               (#{offset VkPhysicalDeviceMemoryProperties, memoryHeaps}
-                 +
-                 sizeOf (undefined :: VkMemoryHeap) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 + sizeOf (undefined :: VkMemoryHeap) * i)
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "memoryHeaps" idx
-            VkPhysicalDeviceMemoryProperties) =>
-         CanWriteFieldArray "memoryHeaps" idx
-           VkPhysicalDeviceMemoryProperties
+         CanWriteFieldArray "memoryHeaps" VkPhysicalDeviceMemoryProperties
          where
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "memoryHeaps" 0 VkPhysicalDeviceMemoryProperties
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "memoryHeaps" 1 VkPhysicalDeviceMemoryProperties
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "memoryHeaps" 2 VkPhysicalDeviceMemoryProperties
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "memoryHeaps" 3 VkPhysicalDeviceMemoryProperties
-                       #-}
-
-        {-# INLINE writeFieldArray #-}
-        writeFieldArray p
+        {-# INLINE writeFieldArrayUnsafe #-}
+        writeFieldArrayUnsafe i p
           = pokeByteOff p
               (#{offset VkPhysicalDeviceMemoryProperties, memoryHeaps}
-                 +
-                 sizeOf (undefined :: VkMemoryHeap) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 + sizeOf (undefined :: VkMemoryHeap) * i)
 
 instance Show VkPhysicalDeviceMemoryProperties where
         showsPrec d x
@@ -15432,66 +15015,34 @@
           = #{offset VkPhysicalDeviceProperties, deviceName}
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "deviceName" idx VkPhysicalDeviceProperties) =>
-         CanReadFieldArray "deviceName" idx VkPhysicalDeviceProperties
-         where
-        {-# SPECIALISE instance
-                       CanReadFieldArray "deviceName" 0 VkPhysicalDeviceProperties #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "deviceName" 1 VkPhysicalDeviceProperties #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "deviceName" 2 VkPhysicalDeviceProperties #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "deviceName" 3 VkPhysicalDeviceProperties #-}
+         CanReadFieldArray "deviceName" VkPhysicalDeviceProperties where
         type FieldArrayLength "deviceName" VkPhysicalDeviceProperties =
              VK_MAX_PHYSICAL_DEVICE_NAME_SIZE
 
         {-# INLINE fieldArrayLength #-}
         fieldArrayLength = VK_MAX_PHYSICAL_DEVICE_NAME_SIZE
 
-        {-# INLINE getFieldArray #-}
-        getFieldArray = f
+        {-# INLINE getFieldArrayUnsafe #-}
+        getFieldArrayUnsafe i = f
           where {-# NOINLINE f #-}
                 f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                 off
                   = #{offset VkPhysicalDeviceProperties, deviceName} +
-                      sizeOf (undefined :: CChar) *
-                        fromInteger (natVal' (proxy## :: Proxy## idx)) -- ' closing tick for hsc2hs
+                      sizeOf (undefined :: CChar) * i
 
-        {-# INLINE readFieldArray #-}
-        readFieldArray p
+        {-# INLINE readFieldArrayUnsafe #-}
+        readFieldArrayUnsafe i p
           = peekByteOff p
               (#{offset VkPhysicalDeviceProperties, deviceName} +
-                 sizeOf (undefined :: CChar) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: CChar) * i)
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "deviceName" idx VkPhysicalDeviceProperties) =>
-         CanWriteFieldArray "deviceName" idx VkPhysicalDeviceProperties
-         where
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "deviceName" 0 VkPhysicalDeviceProperties #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "deviceName" 1 VkPhysicalDeviceProperties #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "deviceName" 2 VkPhysicalDeviceProperties #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "deviceName" 3 VkPhysicalDeviceProperties #-}
-
-        {-# INLINE writeFieldArray #-}
-        writeFieldArray p
+         CanWriteFieldArray "deviceName" VkPhysicalDeviceProperties where
+        {-# INLINE writeFieldArrayUnsafe #-}
+        writeFieldArrayUnsafe i p
           = pokeByteOff p
               (#{offset VkPhysicalDeviceProperties, deviceName} +
-                 sizeOf (undefined :: CChar) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 sizeOf (undefined :: CChar) * i)
 
 instance {-# OVERLAPPING #-}
          HasField "pipelineCacheUUID" VkPhysicalDeviceProperties where
@@ -15512,27 +15063,8 @@
           = #{offset VkPhysicalDeviceProperties, pipelineCacheUUID}
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "pipelineCacheUUID" idx
-            VkPhysicalDeviceProperties) =>
-         CanReadFieldArray "pipelineCacheUUID" idx
-           VkPhysicalDeviceProperties
+         CanReadFieldArray "pipelineCacheUUID" VkPhysicalDeviceProperties
          where
-        {-# SPECIALISE instance
-                       CanReadFieldArray "pipelineCacheUUID" 0 VkPhysicalDeviceProperties
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "pipelineCacheUUID" 1 VkPhysicalDeviceProperties
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "pipelineCacheUUID" 2 VkPhysicalDeviceProperties
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "pipelineCacheUUID" 3 VkPhysicalDeviceProperties
-                       #-}
         type FieldArrayLength "pipelineCacheUUID"
                VkPhysicalDeviceProperties
              = VK_UUID_SIZE
@@ -15540,54 +15072,28 @@
         {-# INLINE fieldArrayLength #-}
         fieldArrayLength = VK_UUID_SIZE
 
-        {-# INLINE getFieldArray #-}
-        getFieldArray = f
+        {-# INLINE getFieldArrayUnsafe #-}
+        getFieldArrayUnsafe i = f
           where {-# NOINLINE f #-}
                 f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                 off
                   = #{offset VkPhysicalDeviceProperties, pipelineCacheUUID}
-                      +
-                      sizeOf (undefined :: Word8) *
-                        fromInteger (natVal' (proxy## :: Proxy## idx)) -- ' closing tick for hsc2hs
+                      + sizeOf (undefined :: Word8) * i
 
-        {-# INLINE readFieldArray #-}
-        readFieldArray p
+        {-# INLINE readFieldArrayUnsafe #-}
+        readFieldArrayUnsafe i p
           = peekByteOff p
               (#{offset VkPhysicalDeviceProperties, pipelineCacheUUID}
-                 +
-                 sizeOf (undefined :: Word8) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 + sizeOf (undefined :: Word8) * i)
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "pipelineCacheUUID" idx
-            VkPhysicalDeviceProperties) =>
-         CanWriteFieldArray "pipelineCacheUUID" idx
-           VkPhysicalDeviceProperties
+         CanWriteFieldArray "pipelineCacheUUID" VkPhysicalDeviceProperties
          where
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "pipelineCacheUUID" 0 VkPhysicalDeviceProperties
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "pipelineCacheUUID" 1 VkPhysicalDeviceProperties
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "pipelineCacheUUID" 2 VkPhysicalDeviceProperties
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "pipelineCacheUUID" 3 VkPhysicalDeviceProperties
-                       #-}
-
-        {-# INLINE writeFieldArray #-}
-        writeFieldArray p
+        {-# INLINE writeFieldArrayUnsafe #-}
+        writeFieldArrayUnsafe i p
           = pokeByteOff p
               (#{offset VkPhysicalDeviceProperties, pipelineCacheUUID}
-                 +
-                 sizeOf (undefined :: Word8) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 + sizeOf (undefined :: Word8) * i)
 
 instance {-# OVERLAPPING #-}
          HasField "limits" VkPhysicalDeviceProperties where
@@ -16772,21 +16278,9 @@
           = #{offset VkPhysicalDeviceSampleLocationsPropertiesEXT, sampleLocationCoordinateRange}
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "sampleLocationCoordinateRange" idx
-            VkPhysicalDeviceSampleLocationsPropertiesEXT) =>
-         CanReadFieldArray "sampleLocationCoordinateRange" idx
+         CanReadFieldArray "sampleLocationCoordinateRange"
            VkPhysicalDeviceSampleLocationsPropertiesEXT
          where
-        {-# SPECIALISE instance
-                       CanReadFieldArray "sampleLocationCoordinateRange" 0
-                         VkPhysicalDeviceSampleLocationsPropertiesEXT
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "sampleLocationCoordinateRange" 1
-                         VkPhysicalDeviceSampleLocationsPropertiesEXT
-                       #-}
         type FieldArrayLength "sampleLocationCoordinateRange"
                VkPhysicalDeviceSampleLocationsPropertiesEXT
              = 2
@@ -16794,48 +16288,29 @@
         {-# INLINE fieldArrayLength #-}
         fieldArrayLength = 2
 
-        {-# INLINE getFieldArray #-}
-        getFieldArray = f
+        {-# INLINE getFieldArrayUnsafe #-}
+        getFieldArrayUnsafe i = f
           where {-# NOINLINE f #-}
                 f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                 off
                   = #{offset VkPhysicalDeviceSampleLocationsPropertiesEXT, sampleLocationCoordinateRange}
-                      +
-                      sizeOf (undefined :: #{type float}) *
-                        fromInteger (natVal' (proxy## :: Proxy## idx)) -- ' closing tick for hsc2hs
+                      + sizeOf (undefined :: #{type float}) * i
 
-        {-# INLINE readFieldArray #-}
-        readFieldArray p
+        {-# INLINE readFieldArrayUnsafe #-}
+        readFieldArrayUnsafe i p
           = peekByteOff p
               (#{offset VkPhysicalDeviceSampleLocationsPropertiesEXT, sampleLocationCoordinateRange}
-                 +
-                 sizeOf (undefined :: #{type float}) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 + sizeOf (undefined :: #{type float}) * i)
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "sampleLocationCoordinateRange" idx
-            VkPhysicalDeviceSampleLocationsPropertiesEXT) =>
-         CanWriteFieldArray "sampleLocationCoordinateRange" idx
+         CanWriteFieldArray "sampleLocationCoordinateRange"
            VkPhysicalDeviceSampleLocationsPropertiesEXT
          where
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "sampleLocationCoordinateRange" 0
-                         VkPhysicalDeviceSampleLocationsPropertiesEXT
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "sampleLocationCoordinateRange" 1
-                         VkPhysicalDeviceSampleLocationsPropertiesEXT
-                       #-}
-
-        {-# INLINE writeFieldArray #-}
-        writeFieldArray p
+        {-# INLINE writeFieldArrayUnsafe #-}
+        writeFieldArrayUnsafe i p
           = pokeByteOff p
               (#{offset VkPhysicalDeviceSampleLocationsPropertiesEXT, sampleLocationCoordinateRange}
-                 +
-                 sizeOf (undefined :: #{type float}) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 + sizeOf (undefined :: #{type float}) * i)
 
 instance {-# OVERLAPPING #-}
          HasField "sampleLocationSubPixelBits"
diff --git a/src-gen/Graphics/Vulkan/Types/Struct/Pipeline.hsc b/src-gen/Graphics/Vulkan/Types/Struct/Pipeline.hsc
--- a/src-gen/Graphics/Vulkan/Types/Struct/Pipeline.hsc
+++ b/src-gen/Graphics/Vulkan/Types/Struct/Pipeline.hsc
@@ -2355,31 +2355,9 @@
           = #{offset VkPipelineColorBlendStateCreateInfo, blendConstants}
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "blendConstants" idx
-            VkPipelineColorBlendStateCreateInfo) =>
-         CanReadFieldArray "blendConstants" idx
+         CanReadFieldArray "blendConstants"
            VkPipelineColorBlendStateCreateInfo
          where
-        {-# SPECIALISE instance
-                       CanReadFieldArray "blendConstants" 0
-                         VkPipelineColorBlendStateCreateInfo
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "blendConstants" 1
-                         VkPipelineColorBlendStateCreateInfo
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "blendConstants" 2
-                         VkPipelineColorBlendStateCreateInfo
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "blendConstants" 3
-                         VkPipelineColorBlendStateCreateInfo
-                       #-}
         type FieldArrayLength "blendConstants"
                VkPipelineColorBlendStateCreateInfo
              = 4
@@ -2387,58 +2365,29 @@
         {-# INLINE fieldArrayLength #-}
         fieldArrayLength = 4
 
-        {-# INLINE getFieldArray #-}
-        getFieldArray = f
+        {-# INLINE getFieldArrayUnsafe #-}
+        getFieldArrayUnsafe i = f
           where {-# NOINLINE f #-}
                 f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                 off
                   = #{offset VkPipelineColorBlendStateCreateInfo, blendConstants}
-                      +
-                      sizeOf (undefined :: #{type float}) *
-                        fromInteger (natVal' (proxy## :: Proxy## idx)) -- ' closing tick for hsc2hs
+                      + sizeOf (undefined :: #{type float}) * i
 
-        {-# INLINE readFieldArray #-}
-        readFieldArray p
+        {-# INLINE readFieldArrayUnsafe #-}
+        readFieldArrayUnsafe i p
           = peekByteOff p
               (#{offset VkPipelineColorBlendStateCreateInfo, blendConstants}
-                 +
-                 sizeOf (undefined :: #{type float}) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 + sizeOf (undefined :: #{type float}) * i)
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "blendConstants" idx
-            VkPipelineColorBlendStateCreateInfo) =>
-         CanWriteFieldArray "blendConstants" idx
+         CanWriteFieldArray "blendConstants"
            VkPipelineColorBlendStateCreateInfo
          where
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "blendConstants" 0
-                         VkPipelineColorBlendStateCreateInfo
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "blendConstants" 1
-                         VkPipelineColorBlendStateCreateInfo
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "blendConstants" 2
-                         VkPipelineColorBlendStateCreateInfo
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "blendConstants" 3
-                         VkPipelineColorBlendStateCreateInfo
-                       #-}
-
-        {-# INLINE writeFieldArray #-}
-        writeFieldArray p
+        {-# INLINE writeFieldArrayUnsafe #-}
+        writeFieldArrayUnsafe i p
           = pokeByteOff p
               (#{offset VkPipelineColorBlendStateCreateInfo, blendConstants}
-                 +
-                 sizeOf (undefined :: #{type float}) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 + sizeOf (undefined :: #{type float}) * i)
 
 instance Show VkPipelineColorBlendStateCreateInfo where
         showsPrec d x
diff --git a/src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc b/src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc
--- a/src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc
+++ b/src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc
@@ -1016,26 +1016,8 @@
           = #{offset VkShaderStatisticsInfoAMD, computeWorkGroupSize}
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "computeWorkGroupSize" idx
-            VkShaderStatisticsInfoAMD) =>
-         CanReadFieldArray "computeWorkGroupSize" idx
-           VkShaderStatisticsInfoAMD
+         CanReadFieldArray "computeWorkGroupSize" VkShaderStatisticsInfoAMD
          where
-        {-# SPECIALISE instance
-                       CanReadFieldArray "computeWorkGroupSize" 0
-                         VkShaderStatisticsInfoAMD
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "computeWorkGroupSize" 1
-                         VkShaderStatisticsInfoAMD
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanReadFieldArray "computeWorkGroupSize" 2
-                         VkShaderStatisticsInfoAMD
-                       #-}
         type FieldArrayLength "computeWorkGroupSize"
                VkShaderStatisticsInfoAMD
              = 3
@@ -1043,53 +1025,28 @@
         {-# INLINE fieldArrayLength #-}
         fieldArrayLength = 3
 
-        {-# INLINE getFieldArray #-}
-        getFieldArray = f
+        {-# INLINE getFieldArrayUnsafe #-}
+        getFieldArrayUnsafe i = f
           where {-# NOINLINE f #-}
                 f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                 off
                   = #{offset VkShaderStatisticsInfoAMD, computeWorkGroupSize}
-                      +
-                      sizeOf (undefined :: Word32) *
-                        fromInteger (natVal' (proxy## :: Proxy## idx)) -- ' closing tick for hsc2hs
+                      + sizeOf (undefined :: Word32) * i
 
-        {-# INLINE readFieldArray #-}
-        readFieldArray p
+        {-# INLINE readFieldArrayUnsafe #-}
+        readFieldArrayUnsafe i p
           = peekByteOff p
               (#{offset VkShaderStatisticsInfoAMD, computeWorkGroupSize}
-                 +
-                 sizeOf (undefined :: Word32) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 + sizeOf (undefined :: Word32) * i)
 
 instance {-# OVERLAPPING #-}
-         (KnownNat idx,
-          IndexInBounds "computeWorkGroupSize" idx
-            VkShaderStatisticsInfoAMD) =>
-         CanWriteFieldArray "computeWorkGroupSize" idx
-           VkShaderStatisticsInfoAMD
+         CanWriteFieldArray "computeWorkGroupSize" VkShaderStatisticsInfoAMD
          where
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "computeWorkGroupSize" 0
-                         VkShaderStatisticsInfoAMD
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "computeWorkGroupSize" 1
-                         VkShaderStatisticsInfoAMD
-                       #-}
-
-        {-# SPECIALISE instance
-                       CanWriteFieldArray "computeWorkGroupSize" 2
-                         VkShaderStatisticsInfoAMD
-                       #-}
-
-        {-# INLINE writeFieldArray #-}
-        writeFieldArray p
+        {-# INLINE writeFieldArrayUnsafe #-}
+        writeFieldArrayUnsafe i p
           = pokeByteOff p
               (#{offset VkShaderStatisticsInfoAMD, computeWorkGroupSize}
-                 +
-                 sizeOf (undefined :: Word32) *
-                   fromInteger (natVal' (proxy## :: Proxy## idx))) -- ' closing tick for hsc2hs
+                 + sizeOf (undefined :: Word32) * i)
 
 instance Show VkShaderStatisticsInfoAMD where
         showsPrec d x
diff --git a/src/Graphics/Vulkan/Marshal.hs b/src/Graphics/Vulkan/Marshal.hs
--- a/src/Graphics/Vulkan/Marshal.hs
+++ b/src/Graphics/Vulkan/Marshal.hs
@@ -33,6 +33,7 @@
     -- * Type-indexed access to struct members
   , HasField (..), CanReadField (..), CanWriteField (..)
   , CanReadFieldArray (..), CanWriteFieldArray (..)
+  , getFieldArray, readFieldArray, writeFieldArray
   , IsFieldArray, IndexInBounds
     -- * Re-exported functions from 'Foreign.ForeignPtr'
   , mallocForeignPtr, withForeignPtr, addForeignPtrFinalizer
@@ -63,6 +64,7 @@
 import           Foreign.Marshal.Utils            (fillBytes)
 import           Foreign.Ptr                      (FunPtr, nullPtr, plusPtr)
 import           Foreign.Storable                 (Storable (sizeOf))
+import           GHC.Exts                         (Proxy#, proxy#)
 import           GHC.Generics                     (Generic)
 import           GHC.Ptr                          (Ptr (..))
 import           GHC.TypeLits
@@ -287,20 +289,44 @@
   writeField :: Ptr a -> FieldType fname a -> IO ()
 
 class ( HasField fname a
-      , IndexInBounds fname idx a
       , IsFieldArray fname a 'True
-      ) => CanReadFieldArray (fname :: Symbol) (idx :: Nat) (a :: Type) where
+      , KnownNat (FieldArrayLength fname a)
+      ) => CanReadFieldArray (fname :: Symbol) (a :: Type) where
   -- | Length of an array that is a field of a structure or union
   type FieldArrayLength fname a :: Nat
   -- | Length of an array that is a field of a structure or union
   fieldArrayLength :: Int
-  getFieldArray :: a -> FieldType fname a
-  readFieldArray :: Ptr a -> IO (FieldType fname a)
+  -- | Index an array-type field. No bound checks.
+  getFieldArrayUnsafe :: Int -> a -> FieldType fname a
+  -- | Read from an array-type field. No bound checks.
+  readFieldArrayUnsafe :: Int -> Ptr a -> IO (FieldType fname a)
 
-class CanReadFieldArray fname idx a
-      => CanWriteFieldArray (fname :: Symbol) (idx :: Nat) (a :: Type) where
-  writeFieldArray :: Ptr a -> FieldType fname a -> IO ()
+getFieldArray :: forall fname idx a
+               . (CanReadFieldArray fname a, IndexInBounds fname idx a, KnownNat idx)
+              => a -> FieldType fname a
+getFieldArray = getFieldArrayUnsafe @fname @a
+  (fromInteger $ natVal' (proxy# :: Proxy# idx))
+{-# INLINE getFieldArray #-}
 
+readFieldArray :: forall fname idx a
+                . (CanReadFieldArray fname a, IndexInBounds fname idx a, KnownNat idx)
+               => Ptr a -> IO (FieldType fname a)
+readFieldArray = readFieldArrayUnsafe @fname @a
+  (fromInteger $ natVal' (proxy# :: Proxy# idx))
+{-# INLINE readFieldArray #-}
+
+class CanReadFieldArray fname a
+      => CanWriteFieldArray (fname :: Symbol) (a :: Type) where
+  -- | Write to an array-type field. No bound checks.
+  writeFieldArrayUnsafe :: Int -> Ptr a -> FieldType fname a -> IO ()
+
+writeFieldArray :: forall fname idx a
+                 . (CanWriteFieldArray fname a, IndexInBounds fname idx a, KnownNat idx)
+                => Ptr a -> FieldType fname a -> IO ()
+writeFieldArray = writeFieldArrayUnsafe @fname @a
+  (fromInteger $ natVal' (proxy# :: Proxy# idx))
+{-# INLINE writeFieldArray #-}
+
 instance {-# OVERLAPPABLE #-}
          TypeError (ErrorNoSuchField fname a) => HasField fname a where
 
@@ -316,13 +342,13 @@
 instance {-# OVERLAPPABLE #-}
          ( HasField fname a
          , IsFieldArray fname a 'True
-         , IndexInBounds fname idx a
          , TypeError (ErrorNotReadableField fname a)
-         ) => CanReadFieldArray fname idx a where
+         , KnownNat (FieldArrayLength fname a)
+         ) => CanReadFieldArray fname a where
 instance {-# OVERLAPPABLE #-}
-         ( CanReadFieldArray fname idx a
+         ( CanReadFieldArray fname a
          , TypeError (ErrorNotWritableField fname a)
-         ) => CanWriteFieldArray fname idx a where
+         ) => CanWriteFieldArray fname a where
 
 
 type IndexInBounds (s :: Symbol) (i :: Nat) (a :: Type)
@@ -398,7 +424,7 @@
 --   The string pointers should not be used outside the callback.
 --   It will point to a correct location only as long as the struct is alive.
 withCStringField :: forall fname a b
-                 . ( CanReadFieldArray fname 0 a
+                 . ( CanReadFieldArray fname a
                    , FieldType fname a ~ CChar
                    , VulkanMarshal a
                    )
@@ -410,7 +436,7 @@
 
 -- | Get pointer to a memory location of the C string field in a structure.
 unsafeCStringField :: forall fname a
-                   . ( CanReadFieldArray fname 0 a
+                   . ( CanReadFieldArray fname a
                      , FieldType fname a ~ CChar
                      , VulkanMarshal a
                      )
@@ -419,30 +445,30 @@
 
 
 getStringField :: forall fname a
-                . ( CanReadFieldArray fname 0 a
+                . ( CanReadFieldArray fname a
                   , FieldType fname a ~ CChar
                   , VulkanMarshal a
                   )
                => a -> String
 getStringField x
-    = case takeForce (fieldArrayLength @fname @0 @a)
+    = case takeForce (fieldArrayLength @fname @a)
          . unsafeDupablePerformIO
          $ withCStringField @fname @a x peekCString of
         ((), s) -> s
 
 readStringField :: forall fname a
-                . ( CanReadFieldArray fname 0 a
+                . ( CanReadFieldArray fname a
                   , FieldType fname a ~ CChar
                   , VulkanMarshal a
                   )
                => Ptr a -> IO String
 readStringField px = do
-  ((), s) <- takeForce (fieldArrayLength @fname @0 @a)
+  ((), s) <- takeForce (fieldArrayLength @fname @a)
          <$> peekCString (px `plusPtr` fieldOffset @fname @a)
   return s
 
 writeStringField :: forall fname a
-                  . ( CanWriteFieldArray fname 0 a
+                  . ( CanWriteFieldArray fname a
                     , FieldType fname a ~ CChar
                     , VulkanMarshal a
                     )
diff --git a/src/Graphics/Vulkan/Marshal/Create.hs b/src/Graphics/Vulkan/Marshal/Create.hs
--- a/src/Graphics/Vulkan/Marshal/Create.hs
+++ b/src/Graphics/Vulkan/Marshal/Create.hs
@@ -23,7 +23,8 @@
 module Graphics.Vulkan.Marshal.Create
     ( CreateVkStruct ()
     , createVk, (&*)
-    , set, setAt, setVk, setVkRef, setStr, setStrRef, setStrListRef, setListRef
+    , set, setAt, setVk, setVkRef, setStr, setStrRef
+    , setStrListRef, setStrListCountAndRef, setListRef, setListCountAndRef
     , SetOptionalFields (..), HandleRemainingFields (..), HandleRemFields
     , unsafeIOCreate
     ) where
@@ -140,7 +141,7 @@
 
 -- | `writeFieldArray` wrapped into `CreateVkStruct` monad.
 setAt :: forall fname i x
-       . CanWriteFieldArray fname i x
+       . ( CanWriteFieldArray fname x, IndexInBounds fname i x, KnownNat i)
       => FieldType fname x -> CreateVkStruct x '[fname] ()
 setAt v = CreateVkStruct $ \p -> (,) ([],[]) <$> writeFieldArray @fname @i @x p v
 
@@ -158,7 +159,7 @@
 
 -- | Write a String into a vulkan struct in-place.
 setStr :: forall fname x
-        . ( CanWriteFieldArray fname 0 x
+        . ( CanWriteFieldArray fname x
           , FieldType fname x ~ CChar
           )
        => String -> CreateVkStruct x '[fname] ()
@@ -198,6 +199,20 @@
   aPtr <- newArray v
   (,) ([coerce aPtr],[]) <$> writeField @fname @x p aPtr
 
+-- | Equivalent to 'set' on a count field and 'setListRef' on a corresponding list field,
+--    where the count is set to the length of the list.
+setListCountAndRef :: forall countfname listfname x a
+                  . ( CanWriteField countfname x
+                    , CanWriteField listfname x
+                    , FieldType countfname x ~ Word32
+                    , FieldType listfname x ~ Ptr a
+                    , Storable a
+                    )
+                  => [a] -> CreateVkStruct x (Union x '[countfname] '[listfname]) ()
+setListCountAndRef list =
+  set @countfname (fromIntegral $ length list) &*
+  setListRef @listfname list
+
 -- | Allocate memory for an array of elements, store them,
 --    and write a pointer to the array into vulkan structure.
 --
@@ -216,6 +231,19 @@
   strptrs <- mapM newCString v
   aPtr <- newArray strptrs
   (,) (coerce aPtr : coerce strptrs,[]) <$> writeField @fname @x p aPtr
+
+-- | Equivalent to 'set' on a count field and 'setStrListRef' on a corresponding list field,
+--    where the count is set to the length of the list.
+setStrListCountAndRef :: forall countfname listfname x
+                      . ( CanWriteField countfname x
+                        , CanWriteField listfname x
+                        , FieldType countfname x ~ Word32
+                        , FieldType listfname x ~ Ptr CString
+                        )
+                      => [String] -> CreateVkStruct x (Union x '[countfname] '[listfname]) ()
+setStrListCountAndRef list =
+  set @countfname (fromIntegral $ length list) &*
+  setStrListRef @listfname list
 
 -- | Write a pointer to a vulkan structure - member of current structure
 --    and make sure the member exists as long as this structure exists.
diff --git a/vulkan-api.cabal b/vulkan-api.cabal
--- a/vulkan-api.cabal
+++ b/vulkan-api.cabal
@@ -3,7 +3,7 @@
 -- it is autogenerated at genvulkan/src/Write/Cabal.hs
 --
 name:                vulkan-api
-version:             1.1.3.0
+version:             1.1.3.1
 synopsis:            Low-level low-overhead vulkan api bindings
 description:
     Haskell bindings for vulkan api as described in vk.xml.
@@ -446,7 +446,7 @@
       if os(windows)
         extra-libraries: vulkan-1
       if os(darwin)
-        frameworks:      MoltenVK
+        extra-libraries: vulkan
       if !os(windows) && !os(darwin)
         extra-libraries: vulkan
     else
