{-# LANGUAGE ScopedTypeVariables, ImpredicativeTypes, TemplateHaskell, LambdaCase, TypeAbstractions, BlockArguments #-}
module T17594a where

import qualified Language.Haskell.TH as TH

id1 :: forall a. a -> a
id1 @t x = x

id2 :: forall a. Bool -> a -> a
id2 @t False x = x :: t
id2 True x = x

id3 :: a -> a
id3 @t x = x :: t

id4 :: forall a b c. a -> b -> c -> forall d e f. d -> e -> f -> (a, b, c, d, e, f)
id4 @t1 @t2 @t3 x1 x2 x3 @t4 @t5 @t6 x4 x5 x6 = (x1 :: t1, x2 :: t2, x3 :: t3, x4 :: t4, x5 :: t5, x6 :: t6)

id5 :: (forall a. a -> a, forall a. a -> a)
id5 = (\ @t x -> x, id1)

id6 :: [forall a. a -> a]
id6 = [\ @t x -> x, id1, id3, fst id5, snd id5, id8]

id7 :: a -> a
id7 @($(TH.varT (TH.mkName "t"))) x = x :: t

id_r_N_t :: (forall a. Bool -> a -> a) -> a -> a
id_r_N_t @t f = f @t False

id8 = id_r_N_t (\ @t _ x -> x :: t)

id9 :: forall a. a -> a
id9 = id_r_N_t \cases
  @t True x -> x :: t
  False x -> x

