{-# LANGUAGE PolyKinds           #-}
{-# LANGUAGE ScopedTypeVariables #-}
module T23 where
import Data.Proxy      (Proxy (..))
import GHC.TypeNats    (KnownNat)
import Type.Reflection (Typeable)

f :: forall k n a. (KnownNat k, KnownNat n, Typeable a)
  => Proxy k -> Proxy n -> Proxy a -> ()
f _ _ _ = ()

-- >>> :type f
-- f :: forall k1 (k2 :: Nat) (n :: Nat) (a :: k1).
--      (KnownNat k2, KnownNat n, Typeable a) =>
--      Proxy k2 -> Proxy n -> Proxy a -> ()