{-# LANGUAGE ScopedTypeVariables, RankNTypes, TypeApplications #-} {-# LANGUAGE KindSignatures, DataKinds, ConstraintKinds, TypeOperators #-} {-# LANGUAGE MultiParamTypeClasses, AllowAmbiguousTypes #-} {-# LANGUAGE FlexibleInstances #-} {-# OPTIONS_GHC -Wall -fno-warn-tabs #-} module Gpu.Vulkan.Pipeline.VertexInputState.Data.Type.TypeValMap (MapTypeVal2(..), MapTypeValMaybe2(..)) where import Data.Kind class MapTypeVal2 c (as :: [Type]) where mapTypeVal2 :: (forall a . c a => a -> b) -> [b] instance MapTypeVal2 c '[] where mapTypeVal2 :: forall b. (forall a. c a => a -> b) -> [b] mapTypeVal2 forall a. c a => a -> b _ = [] instance (c a, MapTypeVal2 c as) => MapTypeVal2 c (a ': as) where mapTypeVal2 :: forall b. (forall a. c a => a -> b) -> [b] mapTypeVal2 forall a. c a => a -> b x = a -> b forall a. c a => a -> b x (a forall a. HasCallStack => a undefined :: a) b -> [b] -> [b] forall a. a -> [a] -> [a] : forall (c :: * -> Constraint) (as :: [*]) b. MapTypeVal2 c as => (forall a. c a => a -> b) -> [b] mapTypeVal2 @c @as a -> b forall a. c a => a -> b x class MapTypeValMaybe2 c (mas :: Maybe [Type]) where mapTypeValMaybe2 :: (forall a . c a => a -> b) -> Maybe [b] instance MapTypeValMaybe2 c 'Nothing where mapTypeValMaybe2 :: forall b. (forall a. c a => a -> b) -> Maybe [b] mapTypeValMaybe2 forall a. c a => a -> b _ = Maybe [b] forall a. Maybe a Nothing instance MapTypeVal2 c as => MapTypeValMaybe2 c ('Just as) where mapTypeValMaybe2 :: forall b. (forall a. c a => a -> b) -> Maybe [b] mapTypeValMaybe2 forall a. c a => a -> b x = [b] -> Maybe [b] forall a. a -> Maybe a Just ([b] -> Maybe [b]) -> [b] -> Maybe [b] forall a b. (a -> b) -> a -> b $ forall (c :: * -> Constraint) (as :: [*]) b. MapTypeVal2 c as => (forall a. c a => a -> b) -> [b] mapTypeVal2 @c @as a -> b forall a. c a => a -> b x