{-# LANGUAGE RankNTypes, TypeApplications #-} module Vta2 where checkIf :: Bool -> (forall a. a -> a) -> (Bool, Int) checkIf _ = if True then \f -> (f True, f 5) else \f -> (f False, f @Int 3) checkCase :: Bool -> (forall a. a -> a) -> (Bool, Int) checkCase _ = case True of True -> \f -> (f True, f 5) False -> \f -> (f False, f @Int 3)