{-# 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)