{-# LANGUAGE TypeFamilies #-} module Main where import GHC.Exts import GHC.Classes data family MyDummyTag :: symbol type WithInt = IP MyDummyTag Int getInt :: WithInt => Int getInt = ip @MyDummyTag withInt :: Int -> (WithInt => r) -> r withInt = withDict ------------ printInt :: WithInt => IO () printInt = print getInt main :: IO () main = withInt 42 printInt