{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE DataKinds, PolyKinds #-} {-# LANGUAGE KindSignatures, TypeOperators #-} {-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_GHC -Wall -fno-warn-tabs #-} module Gpu.Vulkan.Pipeline.VertexInputState.Data.Type.TypeFam (Until) where import Data.Kind type family AppMaybe (f :: x -> y) (mx :: Maybe x) :: Maybe y where AppMaybe _ 'Nothing = 'Nothing AppMaybe f ('Just x) = 'Just (f x) type family Until t (ts :: [Type]) :: Maybe [Type] where Until _ '[] = 'Nothing Until t (t : ts) = 'Just '[t] Until t (t' : ts) = AppMaybe ((:) t') (Until t ts)